2014-01-30 3 views
8

У меня есть это регулярное выражениесписок Match слов без списка символов вокруг

(?:$|^|)(one|common|word|or|another)(?:$|^|) 

, который соответствует отлично, если эти два слова не рядом друг с другом.

One one's more word'word common word or another word more another 

More and more years to match one or more other strings 

And common word things and or 

В вышеприведенном он соответствует one в строке два, но не в or просто рядом с ним. То же самое для common и word в третьей строке.

Живой пример: http://regex101.com/r/hV3wQ3

Я считаю, что это что-то делать с номером без соответствующих групп. Но я не уверен, как достичь конечной цели, чтобы совместить весь список слов без какого-либо символа вокруг них.

Я не хочу one в one's или слово в word'word подлежит согласованию.

ответ

19

С вашей группы захвата явно определить один символ по обе стороны от общего слова, он ищет spacewordspace, а затем, когда он не находит другого space, он терпит неудачу.

В этом случае, поскольку вы не хотите, чтобы все символы, используемые символом символа, улавливались (период, апострофа и т. Д.), Вам нужно использовать немного обмана с помощью групп lookaheads, lookbehind и non-capture. Попробуйте это:

(?:^|(?<=))(one|common|word|or|another)(?:(?=)|$) 

http://regex101.com/r/cM9hD8

Границы слова все еще проще реализовать, так ради эталонным, вы также можете сделать это (хотя он будет включать ', . и т.д.).

\b(one|common|word|or|another)\b 
+0

Я обновил этот вопрос. Вот почему я не использую границу слова. Он соответствует словам «слово» и «один». – San

+1

ОК, что имеет смысл - в этом случае я обновил ответ с новым выражением и ссылкой для вас. – brandonscript

+0

Это делает работу. Великий. Спасибо – San

1

Вместо этого вы можете использовать (?:[\s]|^)(one|common|word|or|another)(?=[\s]|$).

Это не будет соответствовать one's, someone и т.д ...

Проверить DEMO

+0

Я не хочу соответствовать 'one's'. Вот почему я не использую \ b – San

+0

Я обновил свой ответ. –

+0

Теперь проблема заключается в совпадении слова «слово». :( – San

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