🧱 Суть
Регулярные выражения (Regular Expressions, RegExp) – это специальный язык шаблонов для поиска, проверки и изменения строк.
Они позволяют описать правило:
«Найди текст, который соответствует этому шаблону»
Например:
- проверить формат email
- найти все числа в тексте
- заменить часть строки
- проверить пароль
- найти определённые символы
В PHP регулярные выражения работают через семейство функций:
preg_*Они используют движок PCRE (Perl Compatible Regular Expressions).
📦 Проблема
Обычные строковые функции не всегда удобны.
Например:
Проверить email:
$email = "user@example.com";Можно использовать:
strpos($email, '@');Но это проверит только наличие символа @.
Нельзя нормально проверить:
- структуру адреса
- длину частей
- допустимые символы
Для сложных правил нужны регулярные выражения.
💻 Код
Синтаксис регулярных выражений
В PHP шаблон обычно записывается между разделителями:
/pattern/Пример:
/hello/Найдёт:
hello worldРазделители могут быть разными:
#pattern#
~pattern~Чаще всего используют:
/pattern/preg_match() – поиск совпадения
Основная функция для проверки строки.
Синтаксис:
preg_match(
$pattern,
$subject
);Пример:
$result = preg_match(
'/php/',
'I love php'
);Вернёт:
1Если совпадение найдено.
Если нет:
0Проверка числа
preg_match(
'/123/',
'Order 123'
);Найдёт:
Order 123Метасимволы
Регулярные выражения имеют специальные символы.
Любой символ
.
/c.t/Найдёт:
cat
cot
cutЛюбая цифра
\d
/\d/Найдёт:
123Любая буква/цифра/подчёркивание
\w
/\w+/Найдёт:
user123Пробельный символ
\s
/\s/Найдёт:
- пробел
- перенос строки
- таб
Квантификаторы
Определяют количество повторений.
*
0 или больше:
/a*/Совпадёт:
""
"a"
"aaa"+
1 или больше:
/a+/Совпадёт:
a
aaa?
0 или 1:
/a?/{n}
Точное количество:
/\d{4}/Найдёт:
2026{min,max}
Диапазон:
/\d{2,4}/Найдёт:
12
123
1234Якоря начала и конца
Начало строки
^Пример:
/^Hello/Найдёт:
Hello worldНо не:
Say HelloКонец строки
$Пример:
/world$/Найдёт:
Hello worldГруппы и альтернативы
Группа
(user)Позволяет объединить части выражения.
Или
(cat|dog)Найдёт:
catили:
dogpreg_match() с группами
Можно получить найденные части:
$text = "User: Alex";
preg_match(
'/User: (\w+)/',
$text,
$matches
);Результат:
[
"User: Alex",
"Alex"
]Группа в скобках сохранилась.
preg_match_all() – найти все совпадения
Используется, когда нужно получить все найденные элементы.
Пример:
$text = "Numbers: 10 20 30";
preg_match_all(
'/\d+/',
$text,
$matches
);Результат:
[
[
"10",
"20",
"30"
]
]preg_replace() – замена по шаблону
Синтаксис:
preg_replace(
$pattern,
$replacement,
$subject
);Пример:
$text = "Hello 123";
$result = preg_replace(
'/\d+/',
'',
$text
);Результат:
HelloВсе числа удалены.
Замена нескольких пробелов
$text = preg_replace(
'/\s+/',
' ',
$text
);Было:
Hello worldСтало:
Hello worldpreg_split() – разделение строки
Работает как explode(), но по шаблону.
Пример:
$result = preg_split(
'/[\s,]+/',
'one,two three'
);Результат:
[
"one",
"two",
"three"
]Флаги регулярных выражений
После закрывающего / можно добавлять модификаторы.
i – игнорировать регистр
/php/iНайдёт:
PHP
Php
phpm – многострочный режим
Используется с:
^
$u – UTF-8
Очень важен для русского языка:
'/[а-я]+/ui'Без u кириллица может работать некорректно.
Примеры
Проверка email
$email = "user@example.com";
if (
preg_match(
'/^[\w.+-]+@[\w.-]+\.[a-z]{2,}$/i',
$email
)
) {
echo "Valid";
}Проверяется:
- начало строки
- имя пользователя
@- домен
- зона
Проверка пароля
Требования:
- минимум 8 символов
- есть цифра
- есть буква
$password = "Test1234";
$isValid = preg_match(
'/^(?=.*[A-Za-z])(?=.*\d).{8,}$/',
$password
);Частые ошибки
Использовать regex там, где достаточно обычных функций
Плохо:
preg_match('/hello/', $text);Если нужно просто найти слово:
str_contains($text, 'hello');будет лучше.
Забывать про экранирование
Специальные символы:
. * + ? ^ $ ( ) [ ] { } |имеют значение.
Если нужен обычный символ:
\.Не использовать u для русского текста
Плохо:
/[а-я]+/Лучше:
/[а-я]+/uiДелать слишком сложные регулярки
Огромные выражения:
^(?=...)сложно поддерживать.
Лучше:
- разбить проверку
- использовать несколько простых условий
🎯 Вывод
- Регулярные выражения используются для поиска и обработки текста
- В PHP они работают через функции
preg_* preg_match()– найти совпадениеpreg_match_all()– найти все совпаденияpreg_replace()– заменить по шаблонуpreg_split()– разделить строку по шаблону^и$проверяют начало и конец строки+,*,{}управляют количеством повторений()создают группыuнужен для корректной работы с UTF-8- Не стоит использовать regex там, где достаточно обычных функций строк
🔗 Связано
- PHP. Строки: основные функции и особенности
- PHP. Типы данных и приведение типов
- PHP. Работа с HTTP-запросами ($_GET, $_POST, $_FILES)
- PHP. Основы безопасности (XSS, CSRF, SQL Injection)
- PHP. Валидация данных пользователя
- JavaScript. Регулярные выражения (RegExp)
- Backend. Обработка пользовательского ввода