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