Syntactic Confectionery Delight | |
PerlMonks |
(Ovid) Re: Regular Expression matching questionby Ovid (Cardinal) |
on Oct 24, 2000 at 22:46 UTC ( [id://38170]=note: print w/replies, xml ) | Need Help?? |
You've found an issue that bites many programmers (including me). At first glance, the star, being greedy, slurps up everything. However, when you have an alternation, the regex will take the first successful match. Thus, the (ab)* will successfully match nothing and the regex is satisfied. If you reverse the (ab)* and (b)*, the star, being greedy, will match the "b". Try the following code:
The output is as follows: Incidentally, Perl uses a traditional NFA engine for regex matching. If it used the POSIX-NFA engine or a DFA engine, your regex would work as you expect because those engines try to find the longest match that satisfies the regex. If you have experience with those engines, Perl may cause you some confusion.
Cheers, P.S. I'm glad to see you have a sense of humor about the flack you took :) Update: Oops. dchetlin is right. I was typing too fast and didn't consider the DFA issue. Join the Perlmonks Setiathome Group or just go the the link and check out our stats.
In Section
Seekers of Perl Wisdom
|
|