Регулярные выражения в PHP: что это и зачем они нужны?
Регулярные выражения (regex) — это мощный инструмент для поиска, замены и проверки строк по шаблону. В PHP они реализованы через набор функций, которые позволяют разработчику гибко работать с текстовыми данными. Для начинающих эта тема может показаться сложной, но на практике она значительно упрощает обработку форм, валидацию email, парсинг URL и многие другие задачи.
В этой статье мы разберем базовый синтаксис регулярных выражений в PHP, рассмотрим основные функции и приведем понятные примеры для каждой из них.
1. Основы синтаксиса регулярных выражений
Регулярное выражение в PHP — это строка, заключенная в разделители (чаще всего в косую черту /). Внутри этой строки находятся специальные символы (метасимволы) и обычные символы.
Основные метасимволы
.— любой символ, кроме перевода строки.^— начало строки.$— конец строки.*— ноль или более повторений предыдущего символа.+— одно или более повторений.?— ноль или одно повторение.\d— любая цифра (аналог [0-9]).\w— любая буква, цифра или знак подчеркивания.\s— любой пробельный символ.[]— класс символов (например, [a-z] — все строчные латинские буквы).()— группировка.
Пример простого шаблона
Предположим, мы хотим проверить, содержит ли строка слово "php". Простейший шаблон будет выглядеть так:
/php/
Этот шаблон найдет подстроку "php" в любом месте строки (например, в "PHP" без учета регистра не найдет, так как регистр важен). Чтобы сделать поиск регистронезависимым, используется модификатор i:
/php/i
Теперь шаблон совпадет и с "PHP", и с "Php", и с "php".
2. Основные функции для работы с регулярными выражениями в PHP
PHP предоставляет несколько ключевых функций. Рассмотрим три самые популярные: preg_match, preg_replace и preg_split.
2.1. preg_match — проверка совпадения
Функция preg_match проверяет, соответствует ли строка шаблону. Она возвращает 1, если совпадение найдено, и 0 в противном случае. Также можно передать третий аргумент — массив, в который будут записаны все найденные совпадения.
Пример: проверка email
<?php
$email = "user@example.com";
$pattern = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "Email корректен!";
} else {
echo "Email некорректен!";
}
?>
Пояснение шаблона:
^— начало строки.[a-zA-Z0-9._-]+— один или более символов: латинские буквы, цифры, точка, подчеркивание или дефис.@— обязательный символ "собаки".[a-zA-Z0-9.-]+— доменное имя.\.— экранированная точка.[a-zA-Z]{2,}— доменная зона (не менее 2 букв).$— конец строки.
2.2. preg_replace — замена по шаблону
Функция preg_replace ищет совпадения с шаблоном и заменяет их на указанную строку. Это особенно полезно для очистки данных или форматирования текста.
Пример: удаление всех цифр из строки
<?php
$text = "Мой номер: 123-456-7890";
$pattern = "/\d+/";
$replacement = "[ЦИФРЫ]";
$result = preg_replace($pattern, $replacement, $text);
echo $result; // Выведет: "Мой номер: [ЦИФРЫ]-[ЦИФРЫ]-[ЦИФРЫ]"
?>
Если нужно удалить все цифры, просто замените их на пустую строку:
<?php
$text = "Мой номер: 123-456-7890";
$pattern = "/\d+/";
$result = preg_replace($pattern, "", $text);
echo $result; // Выведет: "Мой номер: --"
?>
2.3. preg_split — разбиение строки по шаблону
Функция preg_split работает аналогично explode, но в качестве разделителя использует регулярное выражение. Это позволяет разбивать строку по сложным шаблонам.
Пример: разбиение текста на предложения
<?php
$text = "Привет! Как дела? Всё хорошо.";
$pattern = "/[.!?]+/";
$sentences = preg_split($pattern, $text, -1, PREG_SPLIT_NO_EMPTY);
print_r($sentences);
// Выведет:
// Array
// (
// [0] => Привет
// [1] => Как дела
// [2] => Всё хорошо
// )
?>
Обратите внимание: мы использовали флаг PREG_SPLIT_NO_EMPTY, чтобы исключить пустые элементы из результата.
3. Продвинутые приемы с регулярными выражениями
3.1. Использование групп для извлечения данных
Круглые скобки () не только группируют символы, но и создают "захватывающие группы". С их помощью можно извлечь часть строки.
Пример: извлечение имени и домена из email
<?php
$email = "user@example.com";
$pattern