in reply to Re^2: On zero-width negative lookahead assertions in thread On zero-width negative lookahead assertions
The regexp engine will match if it can find any way to. So what you're asking for is "root, followed by some number (possibly zero) of whitespace characters, followed by something that is not 'admin@somewhere.here'". So it matches with root, followed by zero spaces, followed by ' admin@somewhere.here' (with a leading space). Since the string ' admin@somewhere.here' isn't 'admin@somewhere.here' (without the space), the lookahead works. That's why you need the \s* inside the lookahead, making it "try to find spaces followed by admin@somewhere.here, and if you can, fail" instead of "look for spaces, but make sure it's not followed by admin@somewhere.here". Subtle, but important.
Re^4: On zero-width negative lookahead assertions
by Crian (Curate) on Sep 10, 2004 at 14:54 UTC
|
not exactly, not
"followed by something that is not 'admin@somewhere.here'"
it is
"not followed by 'admin@somewhere.here'
That is a difference, because it matches, if nothing follows at all. | [reply] [Watch: Dir/Any] |
Re^4: On zero-width negative lookahead assertions
by bronto (Priest) on Sep 10, 2004 at 15:32 UTC
|
Uhmmmmm... so the old adagio that "* is greedy" has an exception when zwnlaa come into play; I expected that the \s* had eat all the whitespace before the e-mail address. Ok. Now I am still to understand why that \S thing works...
Oh, by the way, I am doing:
perl -i.bak -pe 'BEGIN { $status = 0 } /^root:(?!\s*admin\@somewhere\.here\s*$)/ and $status = 1 ; END { exit $status }' aliases
and it seems to work great!
Ciao! --bronto
In theory, there is no difference between theory and practice. In practice, there is.
| [reply] [Watch: Dir/Any] [d/l] |
|
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|