标签: php regex preg-match
我正在尝试使其回显“匹配”,但它始终回显“不匹配”。我究竟做错了什么?
<?php $string = "anyway, why is it not matching?"; if (preg_match("~^([a-z]+ |[,.!?] ?)?(who|whom|what|where|when|why|how|which)[s]?\b~i", $string)) { echo "match"; } else { echo "not match"; } ?>
答案 0 :(得分:1)
您的正则表达式^([a-z]+ |[,.!?] ?)的开头表示字符串必须以任意数量的字母开头,后跟一个空格,或者恰好是一个标点符号,后跟一个空格。
^([a-z]+ |[,.!?] ?)
您想要的是匹配一对一单词,后跟零到一个标点符号,再跟零到一个空格:
^([a-z]+[,.!?]? ?)? ~^([a-z]+[,.!?]? ?)?(who|whom|what|where|when|why|how|which)[s]?\b~i
这将与第一组中的逗号和空格匹配,而与第二组中的why匹配,就像在Regexer here 上分解ndown并在3v4l上工作一样 here 。
why