PHP正则表达式检查是否包含特定单词但不包含另一个单词

3

如何利用PHP正则表达式检查字符串变量 $str 是否包含单词'cat'但不包含单词'dog'。

  • 情况1:$str = "My pet: parrot" -> 输出:false
  • 情况2:$str = "My pet: dog and cat" -> 输出:false
  • 情况3:$str = "My pet: cat" -> 输出:true

我已经尝试了以下方法,它可以工作,但我想知道是否有一个单一的正则表达式可以完成它。

$str = "My pet: dog and cat";
if (preg_match('/(\bdog\b)/', $str) && !preg_match('/(\bcat\b)/', $str)) echo 'TRUE';
else echo 'FALSE';

你尝试过什么吗? - Rizier123
1个回答

6
您可以使用负向和正向前瞻来实现此目的:
^(?=.*?cat)(?!.*?dog).*$

要检查完整单词,请使用\b

^(?=.*?\bcat\b)(?!.*?\bdog\b).*$

RegEx Demo


1
我尝试了这个 preg_match('^(?=.?\bcat\b)(?!.?\bdog\b).*$', $str) 但是出现了错误:未找到结束定界符'^' - littleibex
你必须使用:preg_match('/^(?=.*?\bcat\b)(?!.*?\bdog\b).*$/', $str); - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接