Функция preg_match()

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

Тренажер PHP

Регулярные выражения — это мощный инструмент для работы с текстом. Они позволяют находить, проверять и извлекать фрагменты строк по заданному шаблону. В этом уроке мы сосредоточимся на одной из ключевых функций для работы с регулярными выражениями в PHP — `preg_match()`. Мы начнем с самых азов: научимся искать простое слово в строке. Затем перейдем к более сложным вещам: изучим специальные символы (метасимволы), научимся задавать количество повторений (квантификаторы) и извлекать найденные части строки с помощью захватывающих групп. Задания помогут вам понять, как строить шаблоны и анализировать результат работы функции.

Список тем

Основы preg_match

id: 39096_regex_task_1

Заполните пропуски, чтобы найти слово "PHP" в заданной строке. Вам нужно указать имя функции, шаблон для поиска и переменную, в которой будет осуществляться поиск.

Заполните пропуски
<?php
$string = "I love learning PHP!";
$pattern = "/PHP/";

// Используйте функцию для поиска шаблона в строке
if (input1S(input2S, input3S)) {
    echo "Найдено совпадение!";
} else {
    echo "Совпадений не найдено.";
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что возвращает функция?

id: 39096_regex_task_2

Функция `preg_match()` возвращает количество найденных совпадений. Так как она прекращает поиск после первого совпадения, это будет либо 1 (найдено), либо 0 (не найдено). Проанализируйте код и укажите, какое значение будет в переменной `$result`.

Что должно получиться?
<?php
$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/fox/";

$result = preg_match($pattern, $text);

// Какое значение будет в переменной $result?
Сообщения
Проверить
Показать подсказку

Сопоставьте метасимволы и их значения

id: 39096_regex_task_3

Регулярные выражения используют специальные символы (метасимволы) для обозначения классов символов. Сопоставьте метасимвол из левой колонки с его правильным описанием из правой.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
\d
\w
. (точка)
\s
Любой буквенно-цифровой символ или знак подчёркивания [a-zA-Z0-9_]
Любой один символ, кроме символа новой строки
Любой пробельный символ (пробел, таб, перенос строки)
Любая цифра [0-9]
Сообщения
Проверить
Показать подсказку

Ошибка в ограничителях шаблона

id: 39096_regex_task_4

Каждое регулярное выражение в PHP должно быть заключено в пару одинаковых символов-ограничителей (например, `/.../` или `#...#`). В данном коде ограничители не совпадают. Найдите и исправьте ошибку.

Найдите ошибку и исправьте
<?php
$string = "Product ID: 456";
// Ищем последовательность цифр
$pattern = '/\d+#'; // Здесь ошибка
 
if (preg_match($pattern, $string)) {
    echo "ID найден!";
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что найдут квантификаторы?

id: 39096_regex_task_5

Квантификаторы `*`, `+` и `?` указывают, сколько раз должен повторяться предыдущий символ. Проанализируйте код и выберите, что будет выведено на экран.

Выберите правильный вариант ответа
<?php
$text = "Is this good or goood?";
preg_match('/go+d/', $text, $matches);
echo $matches[0];
Сообщения
Проверить
Показать подсказку

Извлечение данных с помощью групп

id: 39096_regex_task_6

Соберите скрипт для извлечения имени пользователя из строки "user: nickname". Используйте захватывающую группу (скобки) для того, чтобы получить только само имя, без "user: ". Отбросьте лишние и неверные строки.

Перетяните в правильном порядке строки из одного блока в другой
$text = "user: admin";
preg_match('/user: (\w+)/', $text, $matches);
echo $matches[1];
<?php
echo $matches[0];
preg_match_all('/user: (\w+)/', $text, $matches);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Проверка формата с помощью якорей

id: 39096_regex_task_7

Используя "якоря" из банка, составьте регулярное выражение для точной проверки, что строка является шестизначным числом, и ничем иным. Перетащите нужные символы в пропуски.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$pincode = "902100";
// Шаблон должен проверять, что вся строка - это 6 цифр
$pattern = "/" . input1S . "\d{6}" . input2S . "/";

if (preg_match($pattern, $pincode)) {
    echo "Формат верный";
} else {
    echo "Формат неверный";
}
^
$
*
?
+
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Поиск без учета регистра

id: 39096_regex_task_8

Чтобы `preg_match` не различал строчные и прописные буквы, используется модификатор `i`. Он ставится после второго ограничителя. Предскажите результат выполнения этого кода.

Что должно получиться?
<?php
$text = "This is a Test string.";
$pattern = "/test/i";

echo preg_match($pattern, $text);
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру