RegEx, одновременная проверка соответствия и несоответствия

LX
На сайте с 11.06.2007
Offline
28
808

Привествую!

Есть такая проблема:

В PHP одним регулярным выражением нужно проверить, есть-ли в строке определенное слово и нет-ли другого:


if (!preg_match("/(слово1|^слово2)/si"){
...
}

Но наряду с этим выражение должно возвращать истину если оно нашло первое слово или не нашло второе.

Вышеупомянутый код почему-то не работает (наличие первого слова проверяет, а отсутствие второго - нет).

Подскажите, как должно выглядеть регулярное выражение для этих целей?

Ѣ-программисты пишут на Petrovich (http://2lx.ru/2009/05/yazyk-programmirovaniya-petrovich/) и Ook! (http://2lx.ru/2009/06/yazyk-programmirovaniya-ook/) Нечего кушать? Подои Зорьку (http://zorkabiz.ru/?zorka=1071)! Мууу...
[Удален]
#1
Ъ-говнокодер

символично

LX
На сайте с 11.06.2007
Offline
28
#2
bearman:
символично

Что есть, то есть.

Но может все-таки что-нибудь посоветуете? Буду рад и не говнокодерскому решению ;)

E2
На сайте с 15.12.2006
Offline
128
#3

Я бы сделал без регулярных выражений с логическим ИЛИ и поиском подстроки ;)

Ап! И тигры у ног моих сели.
S
На сайте с 28.10.2005
Offline
318
#4


if (strstr(...,...) && !strstr(...,...)){
...
}

embo
На сайте с 05.12.2008
Offline
24
#5
Le)(x:

Вышеупомянутый код почему-то не работает (наличие первого слова проверяет, а отсутствие второго - нет).

если почитать мануал

Функция preg_match() возвращает количество найденных соответствий. Это может быть 0 (совпадения не найдены) и 1, поскольку preg_match() прекращает свою работу после первого найденного совпадения.
Плавно двигаемся от сапы к статьям (http://miralinks.ru/users/registration/from:4223)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий