Регулярные выражения в PHP с примерами: на практике

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

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

Начать курс

Регулярные выражения в PHP с примерами: на практике

Регулярные выражения (regex) — это мощный инструмент для поиска, замены и анализа текста. В PHP они реализованы через набор функций PCRE (Perl Compatible Regular Expressions). Без них сложно представить валидацию форм, разбор логов или замену шаблонов в строках.

В этой статье мы разберём регулярные выражения в PHP с примерами, которые вы сможете сразу применить в своих проектах. Мы не будем углубляться в теорию — только практика, код и реальные сценарии.

1. Основные функции для работы с регулярками в PHP

В PHP есть три ключевые функции, которые покрывают 95% задач:

  • preg_match() — поиск первого совпадения.
  • preg_match_all() — поиск всех совпадений.
  • preg_replace() — замена по шаблону.
  • preg_split() — разбиение строки по шаблону.

Все функции требуют три параметра: шаблон (pattern), строку (subject) и необязательные флаги.

Пример 1: Проверка 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,}$/

  • ^ — начало строки.
  • [a-zA-Z0-9._%+-]+ — один или более разрешённых символов.
  • @ — буквально символ @.
  • [a-zA-Z0-9.-]+ — доменное имя.
  • \. — точка (экранированная).
  • [a-zA-Z]{2,} — доменная зона (минимум 2 буквы).
  • $ — конец строки.

Пример 2: Извлечение всех ссылок из HTML

<?php
$html = '<a href="https://pythonlib.ru">Сайт</a> и <a href="/about">О нас</a>';
$pattern = '/href="([^"]+)"/';

preg_match_all($pattern, $html, $matches);

print_r($matches[1]); // Выведет массив ссылок
?>

Здесь ([^"]+) — это захватывающая группа, которая ищет всё, кроме кавычек, внутри атрибута href.

2. Модификаторы и их практическое применение

Модификаторы меняют поведение регулярного выражения. Они ставятся после закрывающего слеша (/).

  • i — регистронезависимый поиск.
  • m — многострочный режим (^ и $ работают для каждой строки).
  • s — точка включает перенос строки.
  • U — ленивый режим (по умолчанию жадный).
  • u — поддержка UTF-8.

Пример 3: Поиск слова без учёта регистра

<?php
$text = "PHP — это мощный язык. php используется везде.";
$pattern = "/php/i";

preg_match_all($pattern, $text, $matches);
echo count($matches[0]); // Выведет 2
?>

Пример 4: Работа с кириллицей (UTF-8)

<?php
$text = "Привет, мир!";
$pattern = "/[а-яё]+/ui"; // u — UTF-8, i — регистронезависимость

preg_match_all($pattern, $text, $matches);
print_r($matches[0]); // ['Привет', 'мир']
?>

Без модификатора u кириллица будет обработана неправильно, потому что PHP считает каждый байт отдельным символом.

3. Замена и разбиение строк с помощью регулярных выражений

Функция preg_replace() позволяет заменять части строки по шаблону. А preg_split() — разбивать строку как explode, но с возможностью использовать регулярку.

Пример 5: Очистка текста от HTML-тегов

<?php
$html = "<h1>Заголовок</h1><p>Текст с <b>жирным</b> словом</p>";
$clean = preg_replace("/<[^>]+>/", "", $html);
echo $clean; // ЗаголовокТекст с жирным словом
?>

Шаблон <[^>]+> находит всё, что начинается с <, заканчивается на > и содержит хотя бы один символ внутри.

Пример 6: Маскирование номера телефона

<?php
$phone = "+7 (123) 456-78-90";
$pattern = "/(\d{3})\d{3}-\d{2}-\d{2}/";
$replacement = "+7 ($1) ***-**-**";
$masked = preg_replace($pattern, $replacement, $phone);
echo $masked; // +7 (123) ***-**-**
?>

Здесь $1 — это обратная ссылка на первую захваченную группу (\d{3}).

Пример 7: Разбиение строки по нескольким разделителям

<?php
$data = "яблоко, груша; апельсин|банан";
$fruits = preg_split("/[,;|]+/", $data);
print_r($fruits); // ['яблоко', 'груша', 'апельсин', 'банан']
?>

Шаблон [,;|]+ означает: один или более символов из набора (запятая, точка с запятой, вертикальная черта).

4. Продвинутые техники: lookahead и lookbehind

Lookahead (опережающая проверка) и lookbehind (ретроспек

Блоги

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