![]() |
|
Keep It Simple, Stupid | |
PerlMonks |
comment on |
( #3333=superdoc: 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 reply to Re: Re: Re: Common Regex Gotchas
by chromatic
|
|