in reply to Re: zero-length match increments pos() (saner)
in thread zero-length match increments pos()
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@/
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: zero-length match increments pos() (two!)
by tye (Sage) on Feb 23, 2005 at 18:17 UTC | |
by demerphq (Chancellor) on Nov 09, 2006 at 00:24 UTC | |
by tye (Sage) on Nov 09, 2006 at 03:48 UTC | |
by demerphq (Chancellor) on Nov 09, 2006 at 10:59 UTC |