Перейти к содержимому

preg_match_all()

Введение

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

Понимание функции preg_match_all()

Функция preg_match_all() ищет все вхождения шаблона регулярного выражения в целевой строке. Она возвращает количество найденных совпадений (или false в случае ошибки) и заполняет массив $matches. Синтаксис:

php
preg_match_all($pattern, $subject, &$matches, $flags = 0, $offset = 0);
  • $pattern: Шаблон регулярного выражения.
  • $subject: Строка для поиска.
  • $matches: Массив, заполненный найденными совпадениями.
  • $flags: Необязательный параметр. Изменяет поведение поиска. К распространенным флагам относятся PREG_PATTERN_ORDER (по умолчанию, группирует результаты по шаблону) и PREG_SET_ORDER (группирует результаты по вхождениям). PREG_OFFSET_CAPTURE добавляет байтовое смещение каждого совпадения.
  • $offset: Необязательный параметр. Указывает начальную позицию в целевой строке.

Пример использования

Следующий пример демонстрирует использование захватывающих групп и структуру массива $matches:

php
<?php

$pattern = '/([A-Z][a-z]+) (\d+)/';
$subject = 'Alice 25 Bob 30';

preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
  echo "Name: {$match[1]}, Age: {$match[2]}\n";
}

В этом примере шаблон использует захватывающие группы () для извлечения имен и возрастов. При использовании PREG_SET_ORDER массив $matches индексируется по номеру совпадения, поэтому $match[0] содержит полное совпадение, $match[1] — первую группу (имя), а $match[2] — вторую группу (возраст). Без захватывающих групп $matches[0] содержит все полные совпадения, а дополнительные индексы групп не создаются.

Заключение

Функция preg_match_all() необходима для поиска всех совпадений шаблона в строках PHP. Она позволяет разработчикам эффективно извлекать и обрабатывать данные. В этом обзоре рассмотрены основные способы использования и структура массива. За дополнительной информацией обращайтесь к официальной документации PHP.

Практика

Какова цель функции preg_match_all() в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.