in reply to Re^2: Strange regex to test for newlines: /.*\z/
in thread Strange regex to test for newlines: /.*\z/

Fair enough, but try:
perl -e 'print "match\n" if "foo\n" =~ /.{0,}\z/'
AFAIK, .* and .{0,} should be exactly equivilent, but when combined with /z they are not, if the string ends in a newline.

There definitely appears to be a bug here, but it may be that the above snippet should not match, rather than the version with .* matching.

Replies are listed 'Best First'.
Re^4: Strange regex to test for newlines: /.*\z/
by xicheng (Sexton) on May 21, 2007 at 16:57 UTC
    hmm, Just notice that, thanks..

    I think, .* and .{0,} at the beginning of a regex pattern shold have been treated as optional, so that /.*A/ and /.{0,}A/ should be the same as /A/ which means .* and .{0,} are completely unnecessary in the above patterns..

    But \z looks behave very differently to .* and .{0,} as you mentioned.

    This looks like a Perl-related problem, PHP(use a similar regex engine) does it pretty well:
    php -r ' $str = "foo\n"; if (preg_match("/.*\z/", $str)) { print "match\n"; } ' match
    Probably it's a bug, and I am waiting for someone to make it clear. :-)

    Regards,
    Xicheng