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
In reply to Re: Regular Expresssion TroubleShoot Help plz
by hv
in thread Regular Expresssion TroubleShoot Help plz
by MajingaZ
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |