正则表达式与多个查询

时间:2019-01-02 17:08:10

标签: php regex

我正在尝试使用一个正则表达式测试多个条件。

我的正则表达式:

^(?=.*no+\s+or+\s+no+\s+maybe).*

示例测试字符串:

  

是或否

     

也许是或否

     

也许不可以

     

也许没有或没有

     

也许不是,或者不是

执行后,它仅与“ 否或可能”匹配。

只要找到“ ”,“ OR ”,“ ”和“ MAYBE”,查询就应该匹配”(不区分大小写)在字符串上

(请注意,有2个 NO 。将第二个 NO 视为一个单独的变量。除非有2个 NO < / strong> s。)

除了“ 可能不存在”之外,它仍应与“ 可能不存在”和“ 可能不存在”匹配

我也尝试过这个:

^(?=.*(?=.*no)(?=.*or)(?=.*no)(?=.*maybe)).*

显然它也匹配了也许是或否

1 个答案:

答案 0 :(得分:0)

您可以使用环视检查条件,并使用单词边界\b来防止单词成为更长匹配的一部分:

^(?=.*\bno(?! maybe\b))(?=.*(?<!\bmaybe) no\b)(?=.*\b(?:no maybe|maybe no)\b)(?=.*\bor\b).+$

这将匹配

  • ^断言字符串的开头
  • (?=.*\bno(?! maybe\b))要断言no的正向前进,而不要使用负向前移
  • (?=.*(?<!\bmaybe) no\b)断言某个no之前可能没有
  • (?=.*\b(?:no maybe|maybe no)\b)断言该字符串包含no maybemaybe no
  • (?=.*\bor\b)断言该字符串包含or
  • .+匹配除换行符1次以上以外的所有字符
  • $声明字符串的结尾

Regex demo