2012-06-26 2 views
0

Казалось, что это просто тривиальная задача, но это не удалось выполнить за последний час.выражение Regualar, сопоставляющее все, что не содержит фразу

Регулярное выражение должно соответствовать каждому слову, которое не содержит фразы «исключить фразу».

Например:
Match:
«ОК строка»
«некоторые phrasOk потому Автошоу не е в фразе»
и т.д ...

Не соответствует:
«исключить фразу '
'некоторый префикс исключить фразу'
'исключить фразу некоторого суффикс'
и т.д ...

+1

вероятный дубликат http://stackoverflow.com/questions/611883/regex-how-to-match-everything-except-a-particular-pattern и http://webproverka.com/ : //stackoverflow.com/questio ns/1687620/regex-match-everything-but –

+2

Возможный дубликат http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word – Gryphius

ответ

2

Если у вас есть фраза:

Lorem Ipsum боль сидеть Амет, consectetur adipiscing Элит.

регулярное выражение, чтобы найти все слова, но не 'сидеть' и 'adipiscing' будет:

\ б (? (= Сидеть | adipiscing)^\ ш + | \ ш +) \ б

в PHP:

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; 

$matches = array(); 
preg_match_all("/\b(?(?=sit|adipiscing)^\w+|\w+)\b/i", $text,$matches); 

var_dump($matches); 
1

Это будет регулярное выражение ^((?!phrase).)*$

1

Самый простой способ решить это: регулярное выражение для соответствия (тривиальное), а затем условие возврата.

Пример в питоне:

>>> not(re.search ('exclude phrase','Some prefix exclude phrase')) 
False 
>>> not(re.search ('exclude phrase','exclude phrase some suffix')) 
False 
>>> not(re.search ('exclude phrase','ok string')) 
True 
+0

Спасибо за ответ, Брюс. Я понимаю, что с программирующим языком это легко сделать. Но это не работает для меня. Мне нужно чистое регулярное выражение, чтобы выполнить обратную проверку. – Nas

Смежные вопросы