Сопоставьте список слов без списка символов вокруг
у меня есть это регулярное выражение
(?:$|^| )(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
int третья строка.
Живой Пример:http://regex101.com/r/hV3wQ3
Я считаю, что это связано с числом несоответствующих групп. Но, я не уверен, как достичь конечной цели соответствия всего списка слов без каких-либо символов вокруг них.
Я не хочу one
на one's
или же слово word'word
быть согласованы.
2 ответов
поскольку ваши группы захвата явно определяют один символ по обе стороны от общего слова, он ищет space
word
space
а затем, когда он не находит другого space
, это не удается.
в этом случае, так как вы не хотите, чтобы соответствовать всем символам границы слова поймали (точка, апостроф и т. д.) вам нужно использовать немного обмана с lookaheads, lookbehinds и группами без захвата. Пытаться это:
(?:^|(?<= ))(one|common|word|or|another)(?:(?= )|$)
границы слов по-прежнему проще реализовать, поэтому для справки вы также можете сделать это (хотя это будет включать '
, .
, etc.).
\b(one|common|word|or|another)\b