Beefy Boxes and Bandwidth Generously Provided by pair Networks
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:

$_ = 'foobar'; /(.*)(?!bar)/; print "$1\n";
That prints "foobar" because there is no "bar" following the string "foobar". Here is an example of how you might use it effectively:
$_ = 'foobar'; /(.*o)(?!bar)/; print "$1\n";
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
in thread Lookahead assertion confusion by steves

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (2)
As of 2024-04-20 03:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found