in reply to lookbehind regexp
Hello cmic,
Did you notice that for the line beginning with "TAGS", the capture includes that word? Even though it is non-greedy, (.*?) starts looking at the beginning of the string and eventually settles on the capture string "TAGS text four ", which satisfies both the lookahead (because it is followed by "TAG2") AND the negative lookbehind — because the string (which includes "TAGS") is not preceeded by "TAGS" !
In general, you can’t combine a negative lookbehind assertion with a match-any-character(s) capture. Do this instead:
use strict; use warnings; while (<DATA>) { print "$1\n" if !/^TAGS/ && /(.*?)(?=TAG2)/; }
Update: Actually, in this case you don’t need a lookahead assertion either. This does just as well:
print "$1\n" if !/^TAGS/ && /(.*?)TAG2/;
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: lookbehind regexp
by Anonymous Monk on Jun 11, 2019 at 13:41 UTC |