Your skill will accomplish what the force of many cannot |
|
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
In your case, you have a negative look-ahead assertion and you actually specify what must follow. It's kind of like saying "match 'foo' as long as 'foo' is followed by 'bar' and not followed by 'baz'." Well, if 'foo' is followed by 'bar' then it can't be followed by 'baz' so the assertion is useless. That's why your expression works exactly the same as it would without the assertion. A negative look-ahead assertion asserts that your expression isn't followed by a pattern. It does not prevent the pattern from being matched within the expression. Consider this example of how not to use it: That prints "foobar" because there is no "bar" following the string "foobar". Here is an example of how you might use it effectively: Notice the literal "o" I added. Now the expression only matches "fo" because the fixed string "bar" does follow "foo." Perl first makes the match, then determines if the match is good by looking at the fixed length string that immediately follows the match. If it can assert that the string does not immediately follow, then the match is good, otherwise it has to backtrack. Edits: Minor typos fixed. Slight rewording. -sauoq "My two cents aren't worth a dime."; In reply to Re: Lookahead assertion confusion
by sauoq
|
|