in reply to Re^2: Non-greedy match end of line bug?
in thread Non-greedy match end of line bug?
You're not taking into account the non-greediness. To accommodate matching the $ (which is before the newline) $1 holds 'foo'. If you also want to match the terminal newline, use \z instead of $:
$ perl -e '$_="foo\n"; print "1=|$1|\n" if m/(fo.+?)$/s' 1=|foo| $ perl -e '$_="foo\n"; print "1=|$1|\n" if m/(fo.+?)\z/s' 1=|foo |
Your comparison with the first one-liner is not comparing apples with apples:
$ perl -e '$_="foo\nbar"; print "1=|$1|\n" if m/(fo.+?)$/s' 1=|foo bar| $ perl -e '$_="foo\nbar\n"; print "1=|$1|\n" if m/(fo.+?)$/s' 1=|foo bar| $ perl -e '$_="foo\nbar\n"; print "1=|$1|\n" if m/(fo.+?)\z/s' 1=|foo bar |
I also second ++Fletch's recommendation to use Regexp::Debugger. This allows you to step through the matching process and see exactly what's happening. I often use it myself.
— Ken
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Non-greedy match end of line bug?
by am12345 (Novice) on Oct 26, 2021 at 20:35 UTC | |
by LanX (Saint) on Oct 26, 2021 at 21:48 UTC | |
by Fletch (Bishop) on Oct 27, 2021 at 00:33 UTC |