http://qs1969.pair.com?node_id=667062

the_0ne has asked for the wisdom of the Perl Monks concerning the following question:

I just can't seem to get these look-ahead/look-behind assertions down pat like some of you. I have this code...

$contents = "<p>no tabs here</p><p>column 1[tab]column 2</p><p>no tabs + here</p>"; if ($contents =~ /<p>(.*?\[tab\].*?)<\/p>/) { print "yes: ${1}\n"; } else { print "no\n"; } if ($contents =~ /<p>(?=\[tab\])<\/p/) { print "yes: ${1}\n"; } else { print "no\n"; }

What I want here is to say only match the set of paragraph markers with the actual string [tab] inside.

Notice the first one DOES match, however, since I am using .*? the first para marker will match and then the .* will take over and match all the way to the close para marker. I want the first para marker to fail because there is no [tab] inside the paragraph markers.

The second one is a look-ahead, but notice the [tab] would have to be immediately after the para marker. I can't figure out how to tell it the possibility of some text, then the [tab], then the possibility of more text.

Thanks for any assistance you may provide...