Я пытаюсь проверить, соответствует ли моя строка шаблону. То есть, полная строка может быть записана как шаблон.
Однако preg_match
возвращает true
, если какая-либо подстрока соответствует этому шаблону.
(Например, preg_match("#[a-z]*#, "333k")
возвращает 1
, чего я не хочу.
В этом примере я бы предпочел проверить, вся строка содержит только небольшие латинские буквы.)
PHP preg_match полная строка
Ответ 1
Вы используете маркеры начала и конца, ^
и $
соответственно, чтобы указать начало и конец строки в шаблоне регулярных выражений. Таким образом вы можете заставить выражение соответствовать только всей строке, а не любой подстроке. В вашем случае это будет выглядеть следующим образом:
preg_match("#^[a-z]*$#", "333k");
Вы также можете с помощью одного из этих маркеров указать, что шаблон должен соответствовать только началу или концу строки.
Ответ 2
Обратите внимание, что для привязки соответствия строк в начале и конце строки вы также можете использовать привязки \A
и \z
.
preg_match('~\A[a-z]*\z~', "333k");
^^ ^^
\A
и \z
являются однозначными началом и окончанием привязок строк в регулярном выражении PHP (поскольку их поведение не зависит от каких-либо модификаторов регулярных выражений, даже если вы укажете m
MULTILINE модификатор, они будут продолжать утверждать начальные и конечные позиции строк). Подробнее о привязках PHP regex в документации по PHP.
Остерегайтесь \z
, хотя: \z
будет соответствовать всей строке до последнего единственного разрыва строки, тогда как \z
будет соответствовать только в самом конце строки, то есть после того, как все символы присутствуют в string (см. В чем разница между \z и\Z в регулярном выражении и когда и как его использовать?)