我正在尝试使用一个正则表达式测试多个条件。
我的正则表达式:
^(?=.*no+\s+or+\s+no+\s+maybe).*
示例测试字符串:
是或否
也许是或否
也许不可以
也许没有或没有
也许不是,或者不是
执行后,它仅与“ 否或可能”匹配。
只要找到“ 否”,“ OR ”,“ 否”和“ MAYBE”,查询就应该匹配”(不区分大小写)在字符串上
(请注意,有2个 NO 。将第二个 NO 视为一个单独的变量。除非有2个 NO < / strong> s。)
除了“ 可能不存在”之外,它仍应与“ 可能不存在”和“ 可能不存在”匹配
我也尝试过这个:
^(?=.*(?=.*no)(?=.*or)(?=.*no)(?=.*maybe)).*
显然它也匹配了也许是或否
答案 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 maybe
或maybe no
(?=.*\bor\b)
断言该字符串包含or
.+
匹配除换行符1次以上以外的所有字符$
声明字符串的结尾