【问题标题】:Match phrases in Regex excluding keywords匹配正则表达式中的短语,不包括关键字
【发布时间】:2019-04-26 13:58:50
【问题描述】:

我正在尝试使用 Regex 根据以下条件返回匹配项:

  • 包含特殊字符的单词不匹配。

  • 关键字 AND 和 OR 不匹配。

  • 匹配一个空格的单词及其后的任何单词,例如 -

    'lorem Ipsum 只是打印的虚拟 AND 文本'

上面应该返回以下匹配项:

  • lorem Ipsum
  • Ipsum 是
  • 简直就是
  • 只是假人
  • 文本
  • 印刷

我已经能够让正则表达式匹配每个单词,除了正确的关键字但它没有捕获空格。我采用了两种类似的方法,结果都略有不同:

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

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

表达式非常接近,但它没有返回我想要的所有匹配项,如上所述,我错过了什么?

【问题讨论】:

  • 这里没有问题。

标签: regex


【解决方案1】:

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

如果支持lookaheadscapturing groups,您可以使用组合一个肯定的前瞻来断言右边的内容是2 个单词,并使用否定的前瞻断言右边的内容也不是@ 987654326@或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 匹配 AND / OR,然后是单词边界、1+ 单词字符和单词边界
    • )关闭第一个捕获组
  • ) 关闭正向预测

Regex demo

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多