匹配正则表达式中的短语(不包括关键字)

时间:2019-04-26 13:58:51

标签: regex

我正在尝试使用正则表达式根据以下条件返回匹配项:

  • 包含特殊字符的单词不匹配。
  • 关键字AND和OR不匹配。
  • 一个空格匹配的单词以及其后的任何单词,例如-

    “ lorem吸管只是伪造的AND印刷文字”

以上内容应返回以下匹配项:

  • lorem吸管
  • Ipsum是
  • 就是
  • 简单的假人
  • 文字
  • 印刷

我已经能够使Regex匹配每个单词,除了正确的关键字外,它不能捕获空格。我采用了两种相似的方法,但结果略有不同:

此正则表达式匹配单词及其空格,但是模式不会继续到下一个单词。

(\w*[^OR|^AND] [^OR|^AND]\w*)

表达式非常接近,但是它没有返回如上所述的所有所需匹配项,我缺少什么?

1 个答案:

答案 0 :(得分:1)

在模式中,您使用否定的字符类[^OR|^AND],该字符类与所列的任何字符都不匹配,因此它将与除ADNOR|^之外的所有字符相匹配

如果支持lookaheadscapturing groups,则可以结合使用正向查找来断言右边是2个单词,并使用负向查找来断言直接在右边是2个单词。既不是OR也不是AND

要匹配单词,您可以使用\w+匹配单词字符

您的比赛将在第一个捕获组中。

(?=(\b(?!(?:AND|OR)\b)\w+ (?!(?:AND|OR)\b)\w+\b))

说明

  • (?=正向前进,断言右边直接是
    • (捕获组1
      • \b(?!(?:AND|OR)\b)单词边界并断言直接在右侧的内容不是AND / OR
    • \w+匹配1个以上的字符,后跟一个空格
    • (?!负向查找,断言直接在右边的不是
      • (?:AND|OR)\b)\w+\b匹配“与/或”,然后匹配单词边界,1个以上的字符字符和单词边界
    • )关闭第一个捕获组
  • )积极回望

Regex demo