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

San*_*San 21 regex pattern-matching regex-group

我有这个正则表达式

(?:$|^| )(one|common|word|or|another)(?:$|^| )
Run Code Online (Sandbox Code Playgroud)

除非两个单词彼此相邻,否则匹配正常.

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
Run Code Online (Sandbox Code Playgroud)

在上面它匹配第二one行但不是or它旁边的.同为commonwordINT第三行.

实例:http://regex101.com/r/hV3wQ3

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

我不希望onein one's或in in word'word匹配.

bra*_*ipt 38

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

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

(?:^|(?<= ))(one|common|word|or|another)(?:(?= )|$)
Run Code Online (Sandbox Code Playgroud)

http://regex101.com/r/cM9hD8

词的边界仍然容易实现,所以对于参考,你也可以做到这一点(虽然这将包括',.等等).

\b(one|common|word|or|another)\b
Run Code Online (Sandbox Code Playgroud)