有必要检查字符串。它应该包含一个子字符串AND不包含其他子字符串。这应该只适用于regexp。
实施例。我们接受字符串' fruit' substring,但不接受字符串包含子字符串' love':
We all love green fruit. -> dont match
We all love to walk. -> dont match
We all green fruit. -> match
如果可能,写一个正则表达式。
/(?<!love).+fruit/ dont work
答案 0 :(得分:3)
我认为这会起作用
^(?!.*\blove\b)(?=.*\bfruit\b).*
<------------><------------->
Don't match Match this
this word word
<强> Regex Demo 强>
注意: - 如果您认为匹配\b
,则可以删除substring
。
答案 1 :(得分:2)
当然,您可以使用strpos
实现所需,但您指定只需要一个正则表达式解决方案。请注意,这不是此任务的最佳方法除非您需要检查特定上下文中的子字符串(例如在字边界内,或在特定符号之后或之前,等)
(?<!love).+fruit
正则表达式将love
个子字符串前面的任何1个以上字符与fruit
子字符串匹配。它将匹配I love fruit
,因为lookbehind在字符串的开头断言为true,然后.+
抓取整个字符串,然后回溯完成其工作以获得fruit
。
事实上,你只需要一个先行来检查字符串开头是否有love
锚定:
^(?!.*love).*fruit
^^^^^^^^^^
请参阅regex demo
您只检查字符串开头的love
子字符串(?!.*love)
(由于^
),然后,如果缺少,则正则表达式匹配任何字符串截至最后/s
的字符(如果fruit
修饰符未使用,则为换行符除外)。
这是PHP demo:
$re = "/^(?!.*love).*fruit/";
if (preg_match($re, "We all love green fruit."))
{
echo "Matched!"; // Won't be displayed since there is no match
}