I'm trying to translate a strange derivative of xml into valid xml. Here
is an example line:
<SUBEVENTSTATUS
1:2><OPERATIONNAME></OPERATIONNAME>gofast<OPERATIONSTATUS>stopped</OPERATIONSTATUS><TARGETOBJECTNAME>name</TARGETOBJECTNAME><TARGETOBJECTVALUE>val</TARGETOBJECTVALUE></SUBEVENTSTATUS
1:1><SUBEVENTSTATUS 2:2><......and on
REXML pukes on the <SUBEVENTSTATUS 1:2> tag... which it should. There
should be some kind of attribute declaration instead. I want to
translate it to something like this: <SUBEVENTSTATUS no="1" of="2">
I'm trying to make a regex to detect the funny tags. Here is what I have
so far:
xml_fix=/<(\S+)\s+(\d+):(\d+)>/
This is great, but it will match this:
<Request><code_set_list 1:2>
instead of just this:
<code_set_list 1:2>
...because there is no gauranteed whitespace between tags. Basically, I
need to stop matching if a ">" is found. I've never had to deal with
anything quite like this in my regex experience. Any help or thoughts of
a better way to do things is much appreciated!
I'm trying to translate a strange derivative of xml into valid xml. Here
is an example line:
<SUBEVENTSTATUS
1:2><OPERATIONNAME></OPERATIONNAME>gofast<OPERATIONSTATUS>stopped</OPERATIONSTATUS><TARGETOBJECTNAME>name</TARGETOBJECTNAME><TARGETOBJECTVALUE>val</TARGETOBJECTVALUE></SUBEVENTSTATUS
1:1><SUBEVENTSTATUS 2:2><......and on
REXML pukes on the <SUBEVENTSTATUS 1:2> tag... which it should. There
should be some kind of attribute declaration instead. I want to
translate it to something like this: <SUBEVENTSTATUS no="1" of="2">
I'm trying to make a regex to detect the funny tags. Here is what I have
so far:
xml_fix=/<(\S+)\s+(\d+):(\d+)>/
This is great, but it will match this:
<Request><code_set_list 1:2>
instead of just this:
<code_set_list 1:2>
..because there is no gauranteed whitespace between tags. Basically, I
need to stop matching if a ">" is found. I've never had to deal with
anything quite like this in my regex experience. Any help or thoughts of
a better way to do things is much appreciated!
I'd simply use /<[^>]+\s+(\d+):(\d+)>/ (untested, but you get my
drift)...
Fred
···
Le 30 mars à 17:34, Jon a écrit :
..because there is no gauranteed whitespace between tags. Basically, I
need to stop matching if a ">" is found. I've never had to deal with
anything quite like this in my regex experience. Any help or thoughts of
a better way to do things is much appreciated!
--
Microsoft sucks, sucks, sucks.
Which wouldn't be such a bad thing, if it were cuter, didn't use its
teeth at inopportune moments, didn't hog the bed, cooked well, and had
good taste in films. Sadly, that's not the case. (Dan Birchall, SDM)
On Sat, Mar 31, 2007 at 12:34:25AM +0900, Jon wrote:
<SUBEVENTSTATUS
1:2><OPERATIONNAME></OPERATIONNAME>gofast<OPERATIONSTATUS>stopped</OPERATIONSTATUS><TARGETOBJECTNAME>name</TARGETOBJECTNAME><TARGETOBJECTVALUE>val</TARGETOBJECTVALUE></SUBEVENTSTATUS
1:1><SUBEVENTSTATUS 2:2><......and on
REXML pukes on the <SUBEVENTSTATUS 1:2> tag... which it should. There
should be some kind of attribute declaration instead. I want to
translate it to something like this: <SUBEVENTSTATUS no="1" of="2">
I'm trying to make a regex to detect the funny tags. Here is what I have
so far:
..because there is no gauranteed whitespace between tags. Basically, I
need to stop matching if a ">" is found. I've never had to deal with
anything quite like this in my regex experience. Any help or thoughts of
a better way to do things is much appreciated!
I can think of several solutions:
/<([^>\s]+)\s+(\d+):(\d+)>/
Or even a two phased approach
/<[^>]+>/
and then with the match
/(\d+):(\d+)>\z/
HTH
robert
awesome, and thank you! but for my benefit, could you explain why that
works? I thought ^ was line start?
..because there is no gauranteed whitespace between tags. Basically, I
need to stop matching if a ">" is found. I've never had to deal with
anything quite like this in my regex experience. Any help or thoughts of
a better way to do things is much appreciated!
I can think of several solutions:
/<([^>\s]+)\s+(\d+):(\d+)>/
Or even a two phased approach
/<[^>]+>/
and then with the match
/(\d+):(\d+)>\z/
HTH
robert
awesome, and thank you! but for my benefit, could you explain why that
works? I thought ^ was line start?