Добро пожаловать в мир регулярных выражений (Regular Expressions)! Это мощнейший инструмент в PHP для поиска, проверки и замены текста по шаблону. Если вы хотите проверить email, найти все телефоны в тексте или разобрать сложный файл логов — без «регулярок» не обойтись.
В основе регулярных выражений лежат метасимволы — специальные знаки, которые означают не просто себя, а некое правило. Например, точка . означает «любой символ», а d — «любая цифра». Символы ^ и $ называются якорями и обозначают начало и конец строки.
В этом уроке мы разберем основные метасимволы, научимся экранировать их (превращать обратно в обычный текст с помощью ) и использовать квантификаторы (например, + или *) для указания количества повторений.
- Онлайн практика поможет вам быстро запомнить синтаксис.
- Разберем примеры использования
preg_match. - Вас ждут тесты и интерактивные задания.
Готовы освоить магию символов? Приступаем к тренировке!
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Iterator интерфейс
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- IteratorAggregate интерфейс
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Функция htmlspecialchars().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Функция preg_match().
- Метасимволы.
- Группировка ().
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
1. Значение метасимволов
В левой колонке перечислены метасимволы регулярных выражений PHP, а в правой — их описания. Сопоставьте каждый метасимвол с его правильным значением. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.
.^$\d\s2. Поиск метасимволов
Перед вами регулярное выражение, записанное в виде строки PHP. Ваша задача — внимательно изучить его и выделить кликом все метасимволы регулярных выражений. К метасимволам относятся специальные символы, которые имеют особое значение в синтаксисе регулярных выражений: якоря (^, $), точка (.), квантификаторы (+, *, ?, {n,m}), круглые и квадратные скобки, вертикальная черта, а также обратный слеш \, используемый для экранирования. Не выделяйте обычные буквенно-цифровые символы (например, буквы f, i, l, e, s или цифры), даже если они находятся внутри шаблона — они являются обычными литералами.
Найдите все метасимволы в следующем регулярном выражении:
/{{^~|~t1}}{{files_~|~t2}}{{\d~|~t3}}{{+~|~t4}}{{\.txt~|~t5}}{{$~|~t6}}/Обратите внимание: разделители шаблона / и флаги после закрывающего слеша не являются частью самого регулярного выражения и метасимволами не считаются.
3. Категории спецсимволов
Перед вами список специальных символов (метасимволов), используемых в регулярных выражениях PHP. Ваша задача — распределить каждый символ по одной из трёх категорий: «Якоря», «Квантификаторы» и «Классы символов». Якоря обозначают начало или конец строки. Квантификаторы указывают, сколько раз предшествующий символ или группа могут повторяться. Классы символов представляют собой сокращённые обозначения для наборов символов (например, цифры, пробелы). Перетащите каждый элемент в соответствующую корзину.
4. Выбор правильного квантификатора
В представленном коде PHP функция preg_match используется для поиска совпадений с шаблоном регулярного выражения. В шаблоне пропущены квантификаторы. Используя выпадающие списки, выберите подходящие квантификаторы (+, *, ?) для каждого пропуска, чтобы шаблон соответствовал описанию в комментарии к коду. Каждый квантификатор определяет, сколько раз предшествующий символ или группа должны повторяться.
<?php
$text1 = "abccc123";
$text2 = "color colour";
$text3 = "100 1000 10000";
$text4 = "user@example.com";
// Шаблон: буква 'c' должна встречаться один или более раз
$pattern1 = "/abcinput1S123/";
preg_match($pattern1, $text1, $matches1);
// Шаблон: буква 'u' может встречаться ноль или один раз (слово 'color' или 'colour')
$pattern2 = "/colouinput2Sr/";
preg_match($pattern2, $text2, $matches2);
// Шаблон: цифра '0' должна встречаться ноль или более раз после '10'
$pattern3 = "/10input3S/";
preg_match($pattern3, $text3, $matches3);
// Шаблон: символ '@' должен встречаться ровно один раз (обязательно)
$pattern4 = "/userinput4Sexample\.com/";
preg_match($pattern4, $text4, $matches4);
if (!empty($matches1)) {
echo "Первый шаблон совпал: " . $matches1[0] . "\n";
}
if (!empty($matches2)) {
echo "Второй шаблон совпал: " . $matches2[0] . "\n";
}
if (!empty($matches3)) {
echo "Третий шаблон совпал: " . $matches3[0] . "\n";
}
if (!empty($matches4)) {
echo "Четвертый шаблон совпал: " . $matches4[0] . "\n";
}
?>5. Что найдет точка?
Проанализируйте код PHP с использованием функции preg_match и регулярного выражения, содержащего метасимвол точки. Определите, какое из предложенных слов будет найдено в строке с помощью данного шаблона. Обратите внимание, что точка в регулярных выражениях соответствует любому одиночному символу, кроме символа новой строки.
<?php
$pattern = '/b.t/';
$string = 'bat, bit, bot, but, bet, bait, bt';
$matches = [];
if (preg_match($pattern, $string, $matches)) {
echo 'Найдено: ' . $matches[0];
} else {
echo 'Совпадений не найдено';
}
?>6. Разбор структуры шаблона
Разметьте части регулярного выражения /^price: \\$/ по типам: выберите для каждого выделенного сегмента, является ли он экранированным символом, квантификатором или якорем начала строки. Это упражнение поможет закрепить понимание метасимволов в регулярных выражениях PHP.
/{{^~|~t1}}{{price:~|~t2}} {{ \\$~|~t3}}/7. Сборка шаблона даты
Перед вами фрагменты регулярного выражения для поиска года в формате четырех цифр. Эти фрагменты перемешаны. Вам нужно собрать из них валидное регулярное выражение, которое будет искать строку, состоящую ровно из четырех цифр от начала до конца. Расставьте фрагменты в правильном порядке, чтобы получился корректный шаблон.
/^{4}\d/$8. Экранирование точки
В этом задании вам нужно дополнить фрагмент кода на PHP, который проверяет имя файла 'image.jpg' с помощью регулярного выражения. В регулярном выражении пропущен символ экранирования перед точкой, чтобы она интерпретировалась как обычный символ, а не как метасимвол 'любой знак'. Вставьте недостающий символ в отмеченное место, чтобы проверка прошла успешно. Учтите, что код должен корректно работать и выводить результат проверки.
<?php
$filename = 'image.jpg';
$pattern = '/imageinput1Sjpg/';
if (preg_match($pattern, $filename)) {
echo 'Имя файла соответствует шаблону.';
} else {
echo 'Имя файла не соответствует шаблону.';
}
?>9. Ошибка в диапазоне
В этом фрагменте PHP-кода допущена ошибка в регулярном выражении, связанная с некорректным использованием диапазона символов внутри квадратных скобок. Проверьте синтаксис класса символов и исправьте строку с ошибкой, чтобы функция preg_match() корректно проверяла строку на соответствие шаблону.
<?php$string = 'Product2024';$pattern = '/^[a-zA-Z0-9-]+$/';if (preg_match($pattern, $string)) { echo 'Строка соответствует шаблону';} else { echo 'Строка не соответствует шаблону';}?>10. Функция валидации логина
Из предложенных строк соберите корректную PHP-функцию validateLogin, которая проверяет, содержит ли переданный логин только допустимые символы: буквы (латинские), цифры и подчёркивание. Функция должна использовать регулярное выражение с метасимволом \w. Некоторые строки являются лишними и не должны входить в решение. Вам нужно расположить строки в правильном порядке, чтобы получить рабочую функцию.
function validateLogin($login) { if (preg_match('/^\w+$/', $login)) { return true; } else { return false; }} echo "Логин проверен"; $result = strpos($login, '_'); if ($login == 'admin') return true;11. Подсчет совпадений
В приведённом фрагменте PHP-кода используется функция preg_match_all() с регулярным выражением, содержащим квантификатор. Проанализируйте код и определите, сколько совпадений будет найдено в указанном тексте. Введите одно число — количество найденных совпадений.
<?php
$text = "Cat, dog, fox, bird, ant, bee, owl, bat, rat, cow";
$pattern = '/\b[a-z]{3}\b/i';
$matches = [];
$result = preg_match_all($pattern, $text, $matches);
echo $result;
?>