http://qs321.pair.com?node_id=390086


in reply to Re: On zero-width negative lookahead assertions
in thread On zero-width negative lookahead assertions

perl -ne '/^root:\s*/ and $_ !~ /admin\@somewhere\.here/ and print' alias

That's ok, but I want to understand that blah-blah-look-ahead thing

perl -ne '/^root:(?!\s*admin\@somewhere\.here)/ and print' alias

This works! But I can't understand why it doesn't work if you put the \s* outside the parens, nor I can understand why it stops working if I put the \s*$ at the end of the regex :-(

Thanks a lot

Ciao!
--bronto


In theory, there is no difference between theory and practice. In practice, there is.

Replies are listed 'Best First'.
Re^3: On zero-width negative lookahead assertions
by Crian (Deacon) on Sep 10, 2004 at 14:51 UTC

    > But I can't understand why it doesn't work if you put the \s* outside the parens, nor I can understand why it stops working if I put the \s*$ at the end of the regex :-(

    That is because if you have the string

    root: admin@somewhere.here 11111233333333333333333333

    and the RE

    /^root:\s*(?!\s*admin\@somewhere\.here)/ ABBBBBCCC

    then the part A in the RE matches the beginning of the string, part BBBBB matches 11111 ("root:") and CCC matches an empty string (not a space, a string with zero chars in it). After this empty string follows a space, and the space is not the beginning of "admin@somewhere.here", because it is the beginning of " admin@somewhere.here".

    I hope things are getting clearer for you :-)