Что такое регулярное выражение?
Регулярное выражение описывает то, что вы ищете в тексте. Вы пишете шаблон из символов, а поиск использует этот шаблон, чтобы находить совпадения.
Шаблоны могут состоять всего из одного символа или быть гораздо сложнее.
Имея шаблон, вы можете использовать его для любого поиска или замены в тексте.
Синтаксис
В PHP регулярное выражение записывается как строка, состоящая максимум из трёх частей: разделителей, самого шаблона и, если они нужны, модификаторов.
Синтаксис регулярного выражения
Здесь косые черты - это разделители, PromptCookbook - шаблон, а i - модификатор:
$exp = "/PromptCookbook/i";
Функции для работы с регулярными выражениями
С регулярными выражениями работают несколько функций PHP. Чаще всего вы будете использовать эти три:
preg_match()- Даёт 1, если строка содержит шаблон, иначе 0preg_match_all()- Считает, сколько раз шаблон встречается в строке; результат может быть равен 0preg_replace()- Возвращает новую строку, в которой совпавшие части заменены другой строкой
Использование preg_match()
Чтобы узнать, содержит ли строка совпадение с шаблоном, вызовите preg_match().
Пример preg_match()
Найдите «PromptCookbook» в строке без учёта регистра. Результат равен 1, потому что совпадение есть:
Вывод: PHP-скрипт
<?php
$str = "Visit PromptCookbook";
$pattern = "/PromptCookbook/i";
echo preg_match($pattern, $str);
?>
Использование preg_match_all()
Когда вам нужно количество совпадений с шаблоном в строке, используйте preg_match_all().
Пример preg_match_all()
Посчитайте, сколько раз «ain» встречается в строке, без учёта регистра:
Вывод: PHP-скрипт
<?php
$str = "The rain in Spain falls mainly on the plain";
$pattern = "/ain/i";
echo preg_match_all($pattern, $str);
?>
Использование preg_replace()
С помощью preg_replace() каждое совпадение с шаблоном в строке заменяется другой строкой.
Пример preg_replace()
Замените Microsoft на PromptCookbook в строке, используя шаблон без учёта регистра:
Вывод: PHP-скрипт
<?php
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "PromptCookbook", $str);
?>
Модификаторы регулярных выражений
Добавление модификатора меняет поведение поиска.
i- Не учитывает разницу между прописными и строчными буквамиm- Включает многострочный режим, так что шаблоны для начала или конца строки совпадают в начале или конце каждой строки текстаu- Обеспечивает правильное совпадение шаблонов в кодировке UTF-8
Шаблоны регулярных выражений
Квадратные скобки позволяют найти один символ из набора или диапазона:
[abc]- Один символ из перечисленных в скобках[^abc]- Один символ, не перечисленный в скобках[a-z]- Одна строчная буква[A-z]- Одна буква, прописная или строчная; этот диапазон также охватывает специальные символы, расположенные между Z и a[A-Z]- Одна прописная буква[123]- Одна цифра из перечисленных в скобках[0-5]- Одна цифра от 0 до 5[0-9]- Одна цифра от 0 до 9
Метасимволы
Некоторые символы в шаблоне не понимаются буквально. У каждого из этих метасимволов своя задача:
|- Разделяет варианты, и совпасть может любой из них, как в cat|dog|fish.- Ровно один символ любого вида^- Привязывает совпадение к началу строки, как в ^Hello$- Привязывает совпадение к концу строки, как в World$\d- Цифра\s- Пробельный символ\b- Граница слова: \bWORD совпадает в начале слова, а WORD\b совпадает в его конце\x{xxxx}- Символ Юникода с шестнадцатеричным номером xxxx (нужен модификаторu)
Квантификаторы
Квантификатор указывает, сколько раз что-либо может встречаться:
n+- Строка с одним или несколькими nn*- Строка, в которой n встречается любое количество раз, включая ни одногоn?- Строка, в которой n встречается один раз или ни разуn{x}- Строка с последовательностью ровно из X символов nn{x,y}- Строка с последовательностью от X до Y символов nn{x,}- Строка с последовательностью из X или более символов n
Группировка
Заключите часть шаблона в круглые скобки (), и квантификатор будет применяться ко всей этой части. Скобки также позволяют выделить части шаблона, чтобы использовать их как совпадение.
Пример группировки
Найдите слово «banana», задав в поиске ba и два повторения na:
Вывод: PHP-скрипт
<?php
$str = "I like bananas";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str);
?>