使此正则表达式代码适用于带撇号的单词

Make this regex code apply to words with an apostrophe

我使用此代码 select 在一个词的两边加上 2 个词。

((\w+\W+){0,2}WORDHERE(\W+\w+){0,2})

但它将撇号分隔的单词视为“两个单词”。

例如,输入文本:

你不是 WORDHERE 是最好的

最差的WORDHERE肯定没赢

结果是:

不是WORDHERE是最好的

最差的 WORDHERE 肯定没有没赢

如何让这段代码理解带有撇号的单词应该被视为一个单词?

似乎我设法通过使用在 SO 上找到的另一个正则表达式代码解决了这个问题:

(?:[^\s\r\n]+[\s\r\n]+[^\s\r\n]*){0,2}WORDHERE(?:[^\s\r\n]*[\s\r\n]+[^\s\r\n]+){0,2}

在您使用的模式中 [^\s\r\n]+ 匹配除白色 space 或换行符之外的任何字符,也可能匹配 ''''

如果要匹配 apostrophe-separated 个撇号不在开头或结尾的单词,您可以使用:

(?:\w+(?:'\w+)? ){0,2}WORDHERE(?: \w+(?:'\w+)?){0,2}

说明

  • (?:非捕获组
    • \w+(?:'\w+)? 匹配 1+ 个单词字符,可选择匹配 ' 和 1+ 个单词字符后跟 space
  • ){0,2}关闭组重复0-2次
  • WORDHERE字面匹配
  • (?:非捕获组
    • \w+(?:'\w+)? 和之前的模式一样,只是space现在在开头
  • ){0,2}关闭组重复0-2次

Regex demo