Note that it would be even better if the regex engine, instead of just enforcing that two matches can't start at the same offset, would also enforce that two matches can't end at the same offset. For example:But it doesn't enforce that at all. What it does is enforce that two zero length matches can't begin at the same point. All it's doing is keeping matches from being repeated. It is consistent with regards to behavior at each end of the string.
For example:
See how the first two matches begin at the same point, just as the last two end at the same point. Or, for more examples of zero-length matches, try this:$ echo abcd | perl -nle 'print "=$1=" while /(^|\w?)/g;' == =a= =b= =c= =d= ==
Note that some implementations of regular expressions which claim to be "perl compatible" (I'm looking at you, java.util.regex) are less smart than perl in this respect. Instead, they do what you accused perl of and prevent any two matches from beginning at the same point. You're right that this is inconsistent with having zero-length matches near the end of the string.$ echo abcd | perl -nle 'print "=$1=" while /(\w??)/g;' == =a= == =b= == =c= == =d= ==
-- @/=map{[/./g]}qw/.h_nJ Xapou cets krht ele_ r_ra/; map{y/X_/\n /;print}map{pop@$_}@/for@/
In reply to Re^2: zero-length match increments pos() (saner)
by fizbin
in thread zero-length match increments pos()
by Errto
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |