![]() |
|
Your skill will accomplish what the force of many cannot |
|
PerlMonks |
Re: Re: Re: Common Regex Gotchasby chromatic (Archbishop) |
on Nov 27, 2001 at 04:47 UTC ( #127677=note: print w/replies, xml ) | Need Help?? |
Why doesn't the engine continue backwards past the whitespace and look for a <\/tag> string?
Because the engine prefers the longest match that starts at the leftmost possible position. When it hits .*, it jumps all the way to the end of the string and then backtracks, trying to match the next necessary character. Because it's backtracking, it matches </tag> at the end of the string. That fits the pattern, so it doesn't continue backtracking to find a shorter match. If, when creating the example string, I carraige return after the <\/tag>, there shouldn't be a whitespace to match on, right? The /s flag allows the '.' token to match newlines. Adding the minimal token '?' avoids the jump-to-end-then-backtrack behavior. It works like you'd expect, trying to match as few characters as possible. Does that clear it up? I've also touched up the formatting somewhat.
In Section
Tutorials
|
|