Метасимволы

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Добро пожаловать в мир регулярных выражений (Regular Expressions)! Это мощнейший инструмент в PHP для поиска, проверки и замены текста по шаблону. Если вы хотите проверить email, найти все телефоны в тексте или разобрать сложный файл логов — без «регулярок» не обойтись.

В основе регулярных выражений лежат метасимволы — специальные знаки, которые означают не просто себя, а некое правило. Например, точка . означает «любой символ», а d — «любая цифра». Символы ^ и $ называются якорями и обозначают начало и конец строки.

В этом уроке мы разберем основные метасимволы, научимся экранировать их (превращать обратно в обычный текст с помощью ) и использовать квантификаторы (например, + или *) для указания количества повторений.

  • Онлайн практика поможет вам быстро запомнить синтаксис.
  • Разберем примеры использования preg_match.
  • Вас ждут тесты и интерактивные задания.

Готовы освоить магию символов? Приступаем к тренировке!

Список тем

1. Значение метасимволов

id: 39100_regex_meta_01_compare

В левой колонке перечислены метасимволы регулярных выражений PHP, а в правой — их описания. Сопоставьте каждый метасимвол с его правильным значением. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
.
^
$
\d
\s
Цифра
Любой символ
Начало строки
Конец строки
Пробельный символ
Сообщения
Проверить
Показать подсказку

2. Поиск метасимволов

id: 39100_regex_meta_02_click

Перед вами регулярное выражение, записанное в виде строки PHP. Ваша задача — внимательно изучить его и выделить кликом все метасимволы регулярных выражений. К метасимволам относятся специальные символы, которые имеют особое значение в синтаксисе регулярных выражений: якоря (^, $), точка (.), квантификаторы (+, *, ?, {n,m}), круглые и квадратные скобки, вертикальная черта, а также обратный слеш \, используемый для экранирования. Не выделяйте обычные буквенно-цифровые символы (например, буквы f, i, l, e, s или цифры), даже если они находятся внутри шаблона — они являются обычными литералами.

Кликните по всем фрагментам, которые подходят под условие задания.

Найдите все метасимволы в следующем регулярном выражении:

/{{^~|~t1}}{{files_~|~t2}}{{\d~|~t3}}{{+~|~t4}}{{\.txt~|~t5}}{{$~|~t6}}/

Обратите внимание: разделители шаблона / и флаги после закрывающего слеша не являются частью самого регулярного выражения и метасимволами не считаются.

Сообщения
Проверить
Показать подсказку

3. Категории спецсимволов

id: 39100_regex_meta_03_sort

Перед вами список специальных символов (метасимволов), используемых в регулярных выражениях PHP. Ваша задача — распределить каждый символ по одной из трёх категорий: «Якоря», «Квантификаторы» и «Классы символов». Якоря обозначают начало или конец строки. Квантификаторы указывают, сколько раз предшествующий символ или группа могут повторяться. Классы символов представляют собой сокращённые обозначения для наборов символов (например, цифры, пробелы). Перетащите каждый элемент в соответствующую корзину.

Перетяните элементы в соответствующие блоки
Якоря
Квантификаторы
Классы символов
^
$
*
+
?
\d
\w
\s
Сообщения
Проверить
Показать подсказку

4. Выбор правильного квантификатора

id: 39100_regex_meta_04_select

В представленном коде 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";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Что найдет точка?

id: 39100_regex_meta_05_predict

Проанализируйте код 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. Разбор структуры шаблона

id: 39100_regex_meta_06_highlight

Разметьте части регулярного выражения /^price: \\$/ по типам: выберите для каждого выделенного сегмента, является ли он экранированным символом, квантификатором или якорем начала строки. Это упражнение поможет закрепить понимание метасимволов в регулярных выражениях PHP.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
/{{^~|~t1}}{{price:~|~t2}} {{ \\$~|~t3}}/
Квантификатор
Экранированный символ
Якорь начала
Сообщения
Проверить
Показать подсказку

7. Сборка шаблона даты

id: 39100_regex_meta_07_sequencing

Перед вами фрагменты регулярного выражения для поиска года в формате четырех цифр. Эти фрагменты перемешаны. Вам нужно собрать из них валидное регулярное выражение, которое будет искать строку, состоящую ровно из четырех цифр от начала до конца. Расставьте фрагменты в правильном порядке, чтобы получился корректный шаблон.

Расставьте строки в правильном порядке
/
^
{4}
\d
/
$
Сообщения
Проверить
Показать подсказку

8. Экранирование точки

id: 39100_regex_meta_08_replace

В этом задании вам нужно дополнить фрагмент кода на PHP, который проверяет имя файла 'image.jpg' с помощью регулярного выражения. В регулярном выражении пропущен символ экранирования перед точкой, чтобы она интерпретировалась как обычный символ, а не как метасимвол 'любой знак'. Вставьте недостающий символ в отмеченное место, чтобы проверка прошла успешно. Учтите, что код должен корректно работать и выводить результат проверки.

Заполните пропуски
<?php
$filename = 'image.jpg';
$pattern = '/imageinput1Sjpg/';

if (preg_match($pattern, $filename)) {
    echo 'Имя файла соответствует шаблону.';
} else {
    echo 'Имя файла не соответствует шаблону.';
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

9. Ошибка в диапазоне

id: 39100_regex_meta_09_error

В этом фрагменте PHP-кода допущена ошибка в регулярном выражении, связанная с некорректным использованием диапазона символов внутри квадратных скобок. Проверьте синтаксис класса символов и исправьте строку с ошибкой, чтобы функция preg_match() корректно проверяла строку на соответствие шаблону.

Найдите ошибку и исправьте
<?php
$string = 'Product2024';
$pattern = '/^[a-zA-Z0-9-]+$/';
if (preg_match($pattern, $string)) {
    echo 'Строка соответствует шаблону';
} else {
    echo 'Строка не соответствует шаблону';
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

10. Функция валидации логина

id: 39100_regex_meta_10_build

Из предложенных строк соберите корректную 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;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

11. Подсчет совпадений

id: 39100_regex_meta_11_result

В приведённом фрагменте 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;
?>
Сообщения
Проверить
Показать подсказку

PHP: запуск кода в браузере

id: 39100_compiler
🐘
Запустить тренажёр (PHP)
НайтиКурс.Ру