in reply to Regular Expresssion TroubleShoot Help plz
The problem is precisely that \1 in a character class is not a backreference: it refers to the ASCII character chr(1), an abbreviation of the octal escape sequence \001.
You can achieve what you want with a slightly more complicated approach using negative lookahead:
m{ \A # anchor to start (\W) # open text (?: (?!\1) . )* # anything that isn't the closer \1 # close text (\W) # separator }xs
That works for the general case, when you simply want to match a bunch of stuff not containing a given substring. In this case though, you want to match "up to the first occurrence" of that substring, so it's much simpler - you just need a minimal match:
m{ \A # anchor to start (\W) # open text .*? # anything contained, up to the ... \1 # ... close text (\W) # separator }xs
(I've taken the liberty of replacing your '+' with '*', on the assumption that you want to allow empty fields.)
Hugo
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Regular Expresssion TroubleShoot Help plz
by MajingaZ (Beadle) on Apr 12, 2006 at 01:30 UTC |