Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: lookbehind regexp

by Athanasius (Archbishop)
on Jun 10, 2019 at 15:01 UTC ( [id://11101204]=note: print w/replies, xml ) Need Help??


in reply to lookbehind regexp

Hello cmic,

Did you notice that for the line beginning with "TAGS", the capture includes that word? Even though it is non-greedy, (.*?) starts looking at the beginning of the string and eventually settles on the capture string "TAGS text four   ", which satisfies both the lookahead (because it is followed by "TAG2") AND the negative lookbehind — because the string (which includes "TAGS") is not preceeded by "TAGS" !

In general, you can’t combine a negative lookbehind assertion with a match-any-character(s) capture. Do this instead:

use strict; use warnings; while (<DATA>) { print "$1\n" if !/^TAGS/ && /(.*?)(?=TAG2)/; }

Update: Actually, in this case you don’t need a lookahead assertion either. This does just as well:

print "$1\n" if !/^TAGS/ && /(.*?)TAG2/;

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: lookbehind regexp
by Anonymous Monk on Jun 11, 2019 at 13:41 UTC
    OK. I get it. But I was just trying to use the "negative lookbehind". I already used the solution with positive lookahead or your solution (which is more elegant, for sure). THX for your help

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11101204]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (2)
As of 2024-04-20 03:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found