РазделыСтатьиРазработка сайтов → Памятка по регулярным выражениям PHP

Введение
Регулярные выражения пишутся или редактируются программистами нечасто, поэтому легко забываются. Памятка призвана восполнить этот пробел, но тем не менее не может служить полноценной заменой справочнику или Гуглу. Цель её — лишь напомнить то, что «знал, но забыл».

1. Функции
preg_replace — поиск и замена по регулярному выражению
preg_match — проверка на соответствие регулярному выражению
preg_match_all — глобальный поиск шаблона в строке
preg_quote — экранирует символы в регулярных выражениях
preg_replace_callback — поиск по регулярному выражению и замена с использованием функции обратного вызова
preg_grep — возвращает массив вхождений, которые соответствуют шаблону
preg_split — разбивает строку по регулярному выражению

2.Ограничители
# — любой не алфавитно-цифровой символ может служить ограничителем регулярного выражения. Чаще всего используется #, также некоторые используют ”/”,”|”,”%”,”$” пример: "/^[a-zA-Z0-9]+$/"
Однако символы кроме # и % использовать не очень удобно — они могут встретиться внутри регулярки и придётся экранировать, что снижает читабельность.

3. Операторы
^ — в начале строки: искать в начале рег. выражения, внутри скобки: отрицание, например [^a-z] не в диапазоне от a до z
$ — искать в конце рег. выражения
?: — внутри круглой скобки означает не запоминать выражение, пример: (?:\s|\.) — либо невидимый символ либо точка
. — любой символ
| — оператор или, например s(o|u)n совпадет как с son, так и с sun
\ — экранирование спецсимволов


4. Классы
[a] — одна буква, внутри квадратной скобки задаётся диапазон символов
[ab] — либо a либо b
[a-z] — один символ в диапазоне от a до z
([a-z]) — круглая скобка объединяет литералы в ещё одно выражение и запоминает его, переменная выводится с помощью \1, \0 означает всё найденное, \1 — первое и так далее до 99

5. Квантификаторы
[a-z]{4} — четыре символа в диапазоне от a до z
[a-z]{1,3} — от 1 до 3 символов в диапазоне от a до z
[a-z]{3,} — 3 и более символов в диапазоне от a до z
[a-z]{,5} — от 0 до 5 символов в диапазоне от a до z
[a-z]? — либо 0 либо 1 символ в диапазоне от a до z
[a-z]+ — хотя бы 1 символ в диапазоне от a до z

6. Метасимволы
\s — невидимый символ (пробел, табуляция, перевод строки)
\S — видимый символ (всё что не \s)
\w - все символы, которые могут входить в слово, обычно это [a-zA-Z_], может зависеть от локали
\W - всё что не может входить в слово
\d - все цифры т.е. [0-9]
\D - всё, что не является цифрой
\n — Символ перевода строки (код 0x0A)
\r — Символ возврата каретки (код 0x0D)
\t — Символ табуляции (код 0x09)
\xhh — Вставка символа с шестнадцатиричным кодом 0xhh, например \x41 вставит латинскую букву 'A'

7. Модификаторы
i — включение режима case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
m — указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы '^' и '$' указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.
s — по умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора /.+/s снимает это ограничение.
U — делает все количественные метасимволы "не жадными" по умолчанию
? — после количественного квантификатора отключает жадность

8. Претензии
\b — на границе слова
\B — не на границе слова
\A — в начале строки
\Z — в конце строки
\z — в конце текста

9. Проверки
(?<=) — позитивная ретроспективная проверка
(?<!) — негативная ретроспективная проверка
(?=) — позитивная опережающая проверка
(?!) — негативная опережающая проверка
20.11.2011 17:46 Автор/источник: admin

Комментировать

Вы не залогинены! Регистрация

Устал читать? Напиши! Или позвони +375 29 5344286. На связи по будним дням с 800 до 1700.