匹配没有字符列表的单词列表

时间:2014-01-30 04:57:33

标签: regex pattern-matching regex-group

我有这个正则表达式

(?:$|^| )(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行中commonword相同。

直播示例:http://regex101.com/r/hV3wQ3

我认为这与非匹配组的号码有关。但是,我不确定如何实现匹配所有单词列表而不包含任何字符的最终目标。

我不希望one中的one'sword'word中的字匹配。

2 个答案:

答案 0 :(得分:31)

由于您的捕获组在公共字的任一侧明确定义了一个字符,因此它正在寻找space word space,然后当它找不到另一个space时},它失败了。

在这种情况下,由于你不想匹配所有字符边界的字符串(句号,撇号等),你需要使用一些技巧,包括前瞻,后瞻和非捕获组。试试这个:

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

http://regex101.com/r/cM9hD8

字边界的实现起来仍然比较简单,因此为了便于参考,您也可以这样做(尽管它包括'.等。)

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

答案 1 :(得分:2)

您可以改为使用(?:[\s]|^)(one|common|word|or|another)(?=[\s]|$)

它不会与one'ssomeone等匹配......

检查 DEMO