Preg_match в PHP не работает должным образом, когда я попробовал это - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь заставить его повторить "совпадение", но оно продолжает повторять "не совпадать".Что я делаю неправильно?

<?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 голосов
/ 23 октября 2018

Начало вашего регулярного выражения ^([a-z]+ |[,.!?] ?) означает, что строка должна начинаться с любого количества букв, за которыми следует пробел, или ровно с одного знака пунктуации, за которым следует пробел.

То, что вы хотите, это соответствовать одномудо одного слова, за которым следуют символы пунктуации от нуля до одного, а затем пробелы от нуля до одного:

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

Это будет соответствовать запятой и пробелу в первой группе и why во второй группе, как это может бытьвидел неработающий на Regexer здесь и работает на 3v4l здесь .

...