PHP preg_match полная строка

Я пытаюсь проверить, соответствует ли моя строка шаблону. То есть, полная строка может быть записана как шаблон. Однако preg_match возвращает true, если какая-либо подстрока соответствует этому шаблону. (Например, preg_match("#[a-z]*#, "333k") возвращает 1, чего я не хочу. В этом примере я бы предпочел проверить, вся строка содержит только небольшие латинские буквы.)

Ответ 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 в регулярном выражении и когда и как его использовать?)