На 23 уроке мы разберем одну из самых мощных и гибких тем в программировании, это регулярные выражения в PHP. Если вы раньше сталкивались с задачами поиска, проверки или замены текста, то регулярные выражения станут вашим надежным инструментом.
Регулярные выражения (Regular Expressions, RegEx) это специальные шаблоны, которые позволяют описывать структуру текста. С их помощью можно:
- Проверять соответствие строки определенному формату (например, email или номеру телефона).
- Извлекать нужные фрагменты из текста.
- Заменять части строки по заданным правилам.
Представьте, что вы детектив, который ищет улики в огромном документе. Регулярные выражения это ваш «увеличитель», который помогает находить нужные «следы» быстро и точно.
Основы синтаксиса регулярных выражений
Перед тем как писать код, разберемся с базовыми элементами RegEx.
1. Литералы
Это обычные символы, которые ищутся «как есть». Например, шаблон cat найдет последовательность букв «c», «a», «t».
2. Метасимволы
Специальные символы, которые задают правила поиска:
| Символ | Описание |
|---|---|
. |
Любой символ, кроме переноса строки. |
^ |
Начало строки. |
$ |
Конец строки. |
* |
Ноль или больше повторений предыдущего символа. |
+ |
Одно или больше повторений предыдущего символа. |
? |
Ноль или одно повторение предыдущего символа. |
\d |
Цифра (эквивалент [0-9]). |
\w |
Буква, цифра или символ подчеркивания (эквивалент [a-zA-Z0-9_]). |
\s |
Пробельный символ (пробел, табуляция, перенос строки). |
[ ] |
Набор символов. Например, [a-z] это любая строчная буква. |
( ) |
Группировка символов. Позволяет применять операторы к группе. |
3. Модификаторы
Флаги, которые меняют поведение регулярного выражения:
iигнорировать регистр (например,/[a-z]/iнайдет и заглавные буквы).mмногострочный режим (символы^и$работают для каждой строки).sточка.включает перенос строки.
Поиск с помощью регулярных выражений в PHP
PHP предоставляет несколько функций для работы с RegEx. Начнем с поиска.
Функция preg_match()
Используется для проверки соответствия строки шаблону. Возвращает 1, если совпадение найдено и 0 в противном случае.
Пример 1: Проверка email
$email = "user@example.com"; $pattern = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/'; if (preg_match($pattern, $email)) { echo "Email корректен!"; } else { echo "Некорректный email."; }
Разберем шаблон:
^начало строки.[a-zA-Z0-9._-]+имя пользователя: буквы, цифры, точки, подчеркивания, дефисы (1 или более символов).@символ «@».[a-zA-Z0-9.-]+домен: буквы, цифры, точки, дефисы.\.точка перед доменом верхнего уровня.[a-zA-Z]{2,6}$домен верхнего уровня (от 2 до 6 букв).$конец строки.
Функция preg_match_all()
Ищет все совпадения в строке и возвращает их количество.
Пример 2: Поиск всех чисел в тексте
$text = "В 2025 году я хочу заработать 50000 рублей. А в 2024 уже 100000."; $pattern = '/\d+/'; preg_match_all($pattern, $text, $matches); print_r($matches[0]); // Выведет: Array ( [0] => 2025 [1] => 50000 [2] => 2024 [3] => 100000 )
Замена текста с помощью preg_replace()
Эта функция заменяет все совпадения с шаблоном на указанную строку.
Пример 1: Замена даты в формате DD-MM-YYYY на YYYY/MM/DD
$date = "Сегодня 31-12-2025"; $pattern = '/(\d{2})-(\d{2})-(\d{4})/'; $replacement = '$3/$2/$1'; // Обратные ссылки на группы echo preg_replace($pattern, $replacement, $date); // Выведет: Сегодня 2025/12/31
Пояснение:
(\d{2})группа из двух цифр (день).(\d{2})месяц.(\d{4})год.$3/$2/$1меняем порядок групп: год/месяц/день.
Практические задачи
Задача 1: Проверка номера телефона
Напишите регулярное выражение для проверки номера телефона в формате +7 (XXX) XXX-XX-XX.
Решение:
$phone = "+7 (912) 345-67-89"; $pattern = '/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/'; echo preg_match($pattern, $phone) ? "Номер верный!" : "Ошибка в номере.";
Задача 2: Извлечение хэштегов из текста
Найдите все хэштеги (слова, начинающиеся с #) в строке.
Решение:
$text = "Сегодня #отличный день для #программирования!"; $pattern = '/#\w+/'; preg_match_all($pattern, $text, $matches); print_r($matches[0]); // Array ( [0] => #отличный [1] => #программирования )
Задача 3: Удаление HTML-тегов
Удалите все HTML-теги из строки, оставив только текст.
Решение:
$html = "<div><h1>Заголовок</h1><p>Текст</p></div>"; $cleanText = preg_replace('/<[^>]+>/', '', $html); echo $cleanText; // Выведет: ЗаголовокТекст
Частые ошибки новичков
- Экранирование символов
Не забывайте экранировать специальные символы, например,\.для поиска точки. - Жадные квантификаторы
По умолчанию*и+«жадные», захватывают максимально возможный текст. Используйте.*?для «ленивого» поиска. - Производительность
Сложные регулярные выражения могут замедлять код. Всегда тестируйте их на реальных данных.
Регулярные выражения это мощный инструмент, который открывает новые возможности для работы с текстом. Сегодня мы изучили основы RegEx. Научились искать и заменять текст, а также решили несколько практических задач. Не бойтесь применять регулярные выражения в своих проектах.
Если вы хотите углубить свои знания, рекомендую изучить документацию по регулярным выражениям в PHP и попрактиковаться на реальных задачах. А если вы только начинаете свой путь в PHP, не забудьте посмотрет мой полный курс с уроками по PHP для начинающих.
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


