2015-10-12 3 views
2

Я хочу найти слово, но исключить совпадения, содержащие большее слово, например. Я хочу искать «собаку», но исключать совпадения, содержащие «собачку».Regex найти слово, но исключить большее слово

Так что «большая собака» и «большой собачий» должен соответствовать, но не «большой собачий»

Следующая НЕ должны соответствовать

big doggie 
bigdoggie 
doggiebig 
bigdoggiebad 

Следующая должна соответствовать

bigdog 
dogbig 
baddogbig 

лучше всего я могу придумать это, но это не работает:

(?!doggie)dog 
+1

Используйте escape-последовательность на границе слова '\ b'. – Barmar

+0

Что такое инструмент/язык? –

+0

@stribizhev php –

ответ

4

Используйте негативный взгляд на будущее:

dog(?!gie) 

См live demo работает со всеми вашими примерами, например

big dog (matches) 
big doggy (matches) 
big doggie (no match) 

Кстати, ваша попытка работает (он только страдает от небольшого дублирования «собаки» в выражении).

0

Используйте слово-граничный символ (\b):

\bdog\b 
+0

@stribizhev Ну, да. Но так как OP может использовать негативный прогноз, я предположил, что '\ b' будет доступен – hjpotter92

+0

, как это соответствует' 'doggie'' в соответствии с вопросом? – Bohemian

+0

Я хочу больше, чем просто полные слова, я хочу, чтобы собаки соответствовали –

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