На 23 уроке мы разберем одну из самых мощных и гибких тем в программировании, это регулярные выражения в PHP. Если вы раньше сталкивались с задачами поиска, проверки или замены текста, то регулярные выражения станут вашим надежным инструментом.
Регулярные выражения (Regular Expressions, RegEx) это специальные шаблоны, которые позволяют описывать структуру текста. С их помощью можно:
Представьте, что вы детектив, который ищет улики в огромном документе. Регулярные выражения это ваш «увеличитель», который помогает находить нужные «следы» быстро и точно.
Перед тем как писать код, разберемся с базовыми элементами RegEx.
Это обычные символы, которые ищутся «как есть». Например, шаблон cat найдет последовательность букв «c», «a», «t».
Специальные символы, которые задают правила поиска:
| Символ | Описание |
|---|---|
. |
Любой символ, кроме переноса строки. |
^ |
Начало строки. |
$ |
Конец строки. |
* |
Ноль или больше повторений предыдущего символа. |
+ |
Одно или больше повторений предыдущего символа. |
? |
Ноль или одно повторение предыдущего символа. |
d |
Цифра (эквивалент [0-9]). |
w |
Буква, цифра или символ подчеркивания (эквивалент [a-zA-Z0-9_]). |
s |
Пробельный символ (пробел, табуляция, перенос строки). |
[ ] |
Набор символов. Например, [a-z] это любая строчная буква. |
( ) |
Группировка символов. Позволяет применять операторы к группе. |
Флаги, которые меняют поведение регулярного выражения:
i игнорировать регистр (например, /[a-z]/i найдет и заглавные буквы).m многострочный режим (символы ^ и $ работают для каждой строки).s точка . включает перенос строки.PHP предоставляет несколько функций для работы с RegEx. Начнем с поиска.
Используется для проверки соответствия строки шаблону. Возвращает 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 букв).$ конец строки.Ищет все совпадения в строке и возвращает их количество.
Пример 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 )
Эта функция заменяет все совпадения с шаблоном на указанную строку.
Пример 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 меняем порядок групп: год/месяц/день.Напишите регулярное выражение для проверки номера телефона в формате +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) ? "Номер верный!" : "Ошибка в номере.";
Найдите все хэштеги (слова, начинающиеся с #) в строке.
Решение:
$text = "Сегодня #отличный день для #программирования!"; $pattern = '/#w+/'; preg_match_all($pattern, $text, $matches); print_r($matches[0]); // Array ( [0] => #отличный [1] => #программирования )
Удалите все HTML-теги из строки, оставив только текст.
Решение:
$html = "<div><h1>Заголовок</h1><p>Текст</p></div>"; $cleanText = preg_replace('/<[^>]+>/', '', $html); echo $cleanText; // Выведет: ЗаголовокТекст
. для поиска точки.* и + «жадные», захватывают максимально возможный текст. Используйте .*? для «ленивого» поиска.Регулярные выражения это мощный инструмент, который открывает новые возможности для работы с текстом. Сегодня мы изучили основы RegEx. Научились искать и заменять текст, а также решили несколько практических задач. Не бойтесь применять регулярные выражения в своих проектах.
Если вы хотите углубить свои знания, рекомендую изучить документацию по регулярным выражениям в PHP и попрактиковаться на реальных задачах. А если вы только начинаете свой путь в PHP, не забудьте посмотрет мой полный курс с уроками по PHP для начинающих.