我有这个正则表达式
(?:$|^| )(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
。第3行中common
和word
相同。
直播示例:http://regex101.com/r/hV3wQ3
我认为这与非匹配组的号码有关。但是,我不确定如何实现匹配所有单词列表而不包含任何字符的最终目标。
我不希望one
中的one's
或word'word
中的字匹配。
答案 0 :(得分:31)
由于您的捕获组在公共字的任一侧明确定义了一个字符,因此它正在寻找space
word
space
,然后当它找不到另一个space
时},它失败了。
在这种情况下,由于你不想匹配所有字符边界的字符串(句号,撇号等),你需要使用一些技巧,包括前瞻,后瞻和非捕获组。试试这个:
(?:^|(?<= ))(one|common|word|or|another)(?:(?= )|$)
字边界的实现起来仍然比较简单,因此为了便于参考,您也可以这样做(尽管它包括'
,.
等。)
\b(one|common|word|or|another)\b
答案 1 :(得分:2)