和REGEX中的运算符

时间:2018-06-26 20:04:44

标签: regex

我正在尝试在应用程序中使用REGEX在文档中找到两个单独的文本组。示例:

(facility services|MAFS|MFA|facility|facilities)
(agreement|lease)

我只想标识在两组文本中都与一个单词匹配的文档,例如facilityagreement。我该如何在REGEX中写出来?

2 个答案:

答案 0 :(得分:1)

如果您只想查找两个匹配项,则可以使用交替顺序以任何一个顺序搜索它们。

((MAFS|MFA|facility|facilities)[\s\S]*(agreement|lease))|((agreement|lease)[\s\S]*(MAFS|MFA|facility|facilities))

如果存在更多模式,则由于组合爆炸而无法很好地扩展,因此提前解决是解决方案。参见Regular Expressions: Is there an AND operator?

答案 1 :(得分:0)

这通常被称为乱序匹配。

如果您遇到两套以上的情况,那么唯一的
有效的方法是使用执行条件构造的引擎。

但是,这是您的2套(?:.*?\b(?:(?(1)(?!))(facility|MAFS|MFA|facilities)|(?(2)(?!))(agreement|lease))\b){2}

可读版本

 (?:
      .*? 
      \b          
      (?:
           (?(1)
                (?!)
           )
           (                        # (1 start)
                facility
             |  MAFS
             |  MFA
             |  facilities
           )                        # (1 end)
        |  
           (?(2)
                (?!)
           )
           ( agreement | lease )    # (2)
      )
      \b 
 ){2}