我需要匹配“ do you”之后的3个或更多字母单词,而不是“ lie”这个单词,但是当我尝试少于3个单词时,它不能正常工作。我该如何解决?$text = "do you a";if (preg_match("~(do you) (?!lie){3,}~", $text)) { echo "it matched!"; }如果不匹配,它会回显“匹配”。
2 回答
DIEA
TA贡献1820条经验 获得超2个赞
您的模式不正确。您不能将定量词应用于否定的前瞻性模式,而必须这样编写模式,
(do you) (?!lie\b)[a-zA-Z]{3,}
另外,您应该使用单词边界\b
使其不只是匹配,lie
而应使其匹配其他单词,例如lied
$text = "do you a";
if (preg_match("~(do you) (?!lie\b)[a-zA-Z]{3,}~", $text)) { echo "it matched! ".$text; }
$text = "do you lie";
if (preg_match("~(do you) (?!lie\b)[a-zA-Z]{3,}~", $text)) { echo "it matched! ".$text; }
$text = "do you lied";
if (preg_match("~(do you) (?!lie\b)[a-zA-Z]{3,}~", $text)) { echo "it matched! ".$text; }
仅打印此,
it matched! do you lied
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消