rverscho has asked for the wisdom of the Perl Monks concerning the following question:
I cannot figure out the following seemingly trivial regex, so I hope some wisdom can be dispensed...
I have a 4-char string, consisting of 'abc' plus a closing newline.
When matching until the end of the string, I get a different result when using '.*$' vs '.*?$': in the first case the closing newline is included, in the second, it is not. Note that /s is being used.
I am mystified how the end of the string can be interpreted different in these regexes, but apparently it is.
What am I missing here?
When the closing char is not a newline, the results are identical, as expected.
This in in Perl v5.14.4 (no options to use a different version).
Thanks much in advance for guidance!
$s = "abc\n"; if ($s =~ /(ab.*?)$/s) { $p = substr($s, @-[1], (@+[1] - @-[1])); print("match A=[$p] length=".length($p)."\n"); } if ($s =~ /(ab.*)$/s) { $q = substr($s, @-[1], (@+[1] - @-[1])); print("match B=[$q] length=".length($q)."\n"); } result: match A=[abc] length=3 match B=[abc ] length=4
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Regex not matching closing newline?
by haukex (Archbishop) on Jan 11, 2019 at 09:42 UTC | |
by rverscho (Initiate) on Jan 11, 2019 at 09:54 UTC | |
by Eily (Monsignor) on Jan 11, 2019 at 11:13 UTC |