Регулярные выражения в PHP с примерами: полное руководство для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Регулярные выражения в 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                

Блоги

Рекомендаций по книгам