Hello Monks,
I just run into quite an odd regex problem: I tried to compile a regex pattern with 'qr' which is case insensitive and contains a lookbehind assertion. If I have certain char combinations in my lookbehind expression, the regex engine throws the error:
Variable length lookbehind not implemented in regex...
Here some examples:
my $pattern = "(?<!ss)abc"; # 'ss' in lookbehind qr/$pattern/i; # throws the error my $pattern = "(?<!st)abc"; # 'st' in lookbehind qr/$pattern/i; # throws the error my $pattern = "(?<!st)abc"; # 'st' in lookbehind qr/$pattern/; # this works fine since modifier 'i' is not + used my $pattern = "(?<!s)abc"; # 's' in lookbehind qr/$pattern/i; # this works fine my $pattern = "(?<!s[st])abc"; # 's[st]' in lookbehind qr/$pattern/i; # this works, whereas these fail: (?<! +s[s]),(?<!s[t])
All patterns do what I'd expect if I don't compiled them.
Seems like the regex engine is interpreting the 'st' or 'ss' string as some meta-command, since no quantifier is used, that would cause a variable length.
I am using a new version of perl (v5.18.0). This problem did not occur in version v5.10.1.
Can anybody explain what is happening here? And is it maybe a known bug in perl version v5.18.0?
Thanks, WW
In reply to qr/STRING/ fails with certain lookbehind expressions by wiewa
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |