in reply to Can't match negated words.

Hi folks, I may have screwed my original post up. I wanted to simply reply but instead I seem to have deleted the original message. I amended my code as follows
if ($line =~ /(?:(?!throw).)/ ) { debug ("Doesn't contain throw"); }
yet it still printed the statement for the line
//throw OtherException
I've put '.*' at the start and end of the reg exp but it still doesn't see the throw in the throw line. Thanks, Mark.

Replies are listed 'Best First'.
Re^2: Can't match negated words.
by hv (Prior) on Jun 24, 2004 at 14:00 UTC

    First, You haven't duplicated Abigail-II's expression correctly; if you do so, it will work correctly:

    if ($line =~ /^(?:(?!throw).)*$/s) { debug ("Doesn't contain throw"); }

    An alternative formulation, which I find slightly cleaner, is to recast it as a single negative lookahead:

    if ($line =~ /^(?!.*?throw)/) { ... }

    Hugo

      hi Hugo, I see that you've a ? before the throw. What function has this? Is the '?' associated with the .* or the throw? Also I'm having hassle getting return characters to appear in my posts so they kinda look like one line posts. Any ideas? Thanks, Mark.