LINUX.ORG.RU

В perl:

(?!pattern) A zero-width negative look-ahead assertion. For example "/foo(?!bar)/" matches any occurrence of "foo" that isn't followed by "bar". Note however that look-ahead and look-behind are NOT the same thing. You cannot use this for look-behind.

If you are looking for a "bar" that isn't preceded by a "foo", "/(?!foo)bar/" will not do what you want. That's because the "(?!foo)" is just saying that the next thing cannot be "foo"--and it's not, it's a "bar", so "foobar" will match. You would have to do something like "/(?!foo)...bar/" for that. We say "like" because there's the case of your "bar" not having three characters before it. You could cover that this way: "/(?:(?!foo)...|^.{0,2})bar/". Sometimes it's still easier just to say:

if (/bar/ && $` !~ /foo$/)

(?<!pattern) A zero-width negative look-behind assertion. For example /(?<!bar)foo/" matches any occurrence of "foo" that does not follow "bar". Works only for fixed-width look-behind.

Xellos ★★★★★
()
Ответ на: комментарий от gangrel

Ну блин. Так бы и сказал сразу, что надо для грепа, а мануал читать лень.

Xellos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.