Регулярные выражения в PHP

 В избранное 
Материал из Интервики
Перейти к: навигация, поиск

Регулярные выражения в PHP (РВ, регулярки, регекспы, RegExp, Regular Expression).

Регулярные выражения различаются, есть тип POSIX, есть Perl-совместимые. Каждый тип описывается своими правилами, которые несколько различаются. В PHP для каждого вида есть свои функции. Для Perl они начинаются на "preg_", а для POSIX - "ereg_".

Чтобы интерпретатор PHP отличал регулярное выражение от простого, РВ необходимо заключать в ограничители: // или ~~ или $$.

Метасимволы относятся или к предыдущему символу или к группе, заключенной в круглые скобки.

Символьный класс

[-,a-z] - означает, что в символьный класс входят минус, запятая, а так же буквы латинского алфавита от a до z. [^abc] - все символы (не буквы, а именно символы), кроме букв латинского алфавита a, b, c. Специальный спецсимвол отрицания: ^ (крышка). [2-9]{5} - любые 5 чисел от 2 до 9 подряд.

Спецсимволы

В РВ можно поставить пробел так, как ставят в письме, например: [a-z ]

\s - либо пробел, либо символ табуляции, либо перевод строки.

\S - видимые символы, т.е. все, что не совпадает с \s.

\w - символьный класс, в него входят все символы, которые могут входить в слово, обычно это [a-zA-Z_], хотя много может зависеть от установленной локали, поддержки юникода и т.д.

\W - все что не входит в определение \w. либо [^a-zA-Z_]

\d - все цифры т.е. уже известный вам символьный класс [0-9]

\D - все, что не является цифрой.

. - точка, описывает любой символ. \. - это именно точка.

Квантификаторы

Количество повторений литерала или группы литералов задается квантификаторами.

abc{2} - два символа "c" подряд, т.е. - "abcc".

123{2,5}45 - от двух до 5 символов "3" подряд.

(абв){,6} - от 0 до 6 повторений "абв".

(5678){45,} - от 45 и выше повторений "5678".

* - звездочка - от 0 и выше повторений предыдущего литерала или группы.

? - знак вопроса - 0 или 1. /аб?в/ означает либо "ав" либо "абв".

+ - знак плюса - 1 или больше повторений.

/.*?/ - означает "ленивое" количество любых символов, а /.*/ - жадное количество. Например: /а.*?а/ в строке "абракадабра" выберет "абра", потом "ада", а выражение /а.*а/ выберет все выражение - от первой "а" до последней.

Модификаторы

Спецсимволы, определяющие "системные" параметры анализа регулярных выражений. Такие символы могут применяться как по отдельности, так и одновременно.

i - включает регистро-независимый режим, т.е. большие и маленькие буквы в выражении считаются одинаковыми.

s - По умолчанию метасимвол "." не включает в свое определение символ перевода строки, т.е. для многострочного текста выражение /.+/ вернет только первую строку. Указание модификатора s говорит интерпретатору рассматривать весь текст, как одну строку.

U - Делает все количественные метасимволы "не жадными" по умолчанию. В некоторых модификациях языка (в частности в PHP) вместо "U" используется символ "g", более соответствующий смыслу ("g" - сокращение от английского "greedy", "жадный").

g - в другой версии, смысл модификатора в том, что поиск не останавливается после первого нахождения регулярки в выражении.


Логика[править]

| - вертикальная черточка означает ИЛИ. Например: /ыз|жц/ означает - или "ыэц" или "ыжц".

(?=ЯЯ) - совпадение с "ЯЯ".

(?!ААА) - означает НЕ "ААА".

Примеры[править]

Убираем "http://", "https://" и "www":

$out = preg_replace ( "~(https?:\/\/)?(www\.)?~is", "", $out );

Ссылки[править]

  • regex101.com - сервис для проверки регекспов.