I could, but I think that
perldoc perlre can give a better explanation:
(?!pattern)
A zero-width negative lookahead assertion. For
example /foo(?!bar)/ matches any occurrence of
"foo" that isn't followed by "bar". Note however
that lookahead and lookbehind are NOT the same
thing. You cannot use this for lookbehind.
If you are looking for a "bar" that isn't preceded
by a "foo", /(?!foo)bar/ will not do what you
want. That's because the (?!foo) is just saying
that the next thing cannot be "foo"--and it's not,
it's a "bar", so "foobar" will match. You would
have to do something like /(?!foo)...bar/ for
that. We say "like" because there's the case of
your "bar" not having three characters before it.
You could cover that this way:
/(?:(?!foo)...|^.{0,2})bar/. Sometimes it's still
easier just to say:
if (/bar/ && $` !~ /foo$/)
Cheers,
Shendal
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.