如何构建正则表达式以匹配模式,同时排除某些与模式匹配的已知单词

时间:2018-02-27 17:44:18

标签: regex

如何构建正则表达式以匹配模式,同时排除某些与模式匹配的已知单词。在示例中,我有这个字符串:

我喜欢d.r.e.a.m去做我喜欢的事。

我有以下正则表达式: \ b(。{1,2}(\ s |。| - | _)){2,}

匹配:

到d.r.e.a.m

要做的事情

我想要的是以匹配的方式更改此正则表达式:

d.r.e.a.m

我知道。

如果我将其更改为 \ b([^(to)] {1,2}(\ s |。| - | _)){2,}

它将部分工作但它会排除单个字母,如 't''o'而不是整个单词'to'

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用

/\b(?!(?:I|at|[td]o)\b)\w{1,2}(?:[\W_](?!(?:I|at|[td]o)\b)\w{1,2})*\b/

请参阅this Rubular demo

匹配

  • \b - 字边界
  • (?!(?:I|at|[td]o)\b)\w{1,2} - 后跟1或2个字词不等于Iattodo
  • (?:[\W_](?!(?:I|at|[td]o)\b)\w{1,2})* - 重复0次以上:
    • [\W_] - 非字词或_
    • (?!(?:I|at|[td]o)\b)\w{1,2} - 见上文
  • \b - 一个单词边界。