我尝试过时,php中的Preg_match无法正常工作

时间:2018-10-23 02:33:15

标签: 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"; }

?>

1 个答案:

答案 0 :(得分:1)

您的正则表达式^([a-z]+ |[,.!?] ?)的开头表示字符串必须以任意数量的字母开头,后跟一个空格,或者恰好是一个标点符号,后跟一个空格。

您想要的是匹配一对一单词,后跟零到一个标点符号,再跟零到一个空格:

^([a-z]+[,.!?]? ?)?
~^([a-z]+[,.!?]? ?)?(who|whom|what|where|when|why|how|which)[s]?\b~i

这将与第一组中的逗号和空格匹配,而与第二组中的why匹配,就像在Regexer here 上分解ndown并在3v4l上工作一样 here