匹配一个3个或更多字母单词而不是某个单词的单词

我需要匹配“ do you”之后的3个或更多字母单词,而不是“ lie”这个单词,但是当我尝试少于3个单词时,它不能正常工作。我该如何解决?


$text = "do you a";

if (preg_match("~(do you) (?!lie){3,}~", $text)) { echo "it matched!"; }

如果不匹配,它会回显“匹配”。


绝地无双
浏览 189回答 2
2回答

DIEA

您的模式不正确。您不能将定量词应用于否定的前瞻性模式,而必须这样编写模式,(do you) (?!lie\b)[a-zA-Z]{3,}另外,您应该使用单词边界\b使其不只是匹配,lie而应使其匹配其他单词,例如lied正则表达式演示PHP代码演示$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
打开App,查看更多内容
随时随地看视频慕课网APP