Функция PHP preg_match_all()

PHP 正则表达式(PCRE)Регулярные выражения PHP (PCRE)

Функция preg_match_all используется для выполнения глобального сопоставления с регулярным выражением.

Синтаксис

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

Выполняет поиск в subject всех совпадений с регулярным выражением, заданным в pattern, и выводит их в matches в порядке, указанном в flags.

После того как найдено первое совпадение, последующие поиски продолжаются с позиции последнего совпадения.

Описание параметра:

  • $pattern: шаблон для поиска, в виде строки.

  • $subject: входная строка.

  • $matches: Многомерный массив, который выводит все результаты совпадений в качестве выходного параметра. Порядок массива задаётся flags.

  • $flags: Можно использовать со следующими флагами (обратите внимание, что PREG_PATTERN_ORDER и PREG_SET_ORDER нельзя использовать одновременно):

    1. PREG_PATTERN_ORDER: Результаты упорядочиваются так, что $matches

    2. PREG_SET_ORDER: Результаты упорядочиваются так, что $matches

    3. PREG_OFFSET_CAPTURE: Если передан этот флаг, каждое найденное совпадение также будет включать своё смещение относительно целевой строки при возврате.

  • offset: Обычно поиск начинается с начала целевой строки. Необязательный параметр offset используется для начала поиска с указанной позиции в целевой строке (в байтах).

Возвращаемое значение

Возвращает количество полных совпадений (может быть 0) или FALSE при возникновении ошибки.

Примеры

Найдите содержимое, соответствующее тегам <b> и </b>:

<?php $userinfo = "Имя: <b>PHP</b> <br> Заголовок: <b>Язык программирования</b>"; preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array); print_r($pat_array[0]); ?>

Результат выполнения выглядит следующим образом:

Array
(
    [0] => <b>PHP</b>
    [1] => <b>Programming Language</b>
)

Найти совпадающие HTML-теги (жадно):

<?php //\\2 — это пример обратной ссылки. Это говорит PCRE, что он должен сопоставить результат, захваченный второй группой в скобках в регулярном выражении (здесь, ([\w]+)) //Совпавший результат. Здесь используются две обратные косые черты, потому что используются двойные кавычки. $html = "<b>bold text</b><a href=howdy.html>click me</a>"; preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); foreach ($matches as $val) { echo "совпадение: " . $val[0] . "\n"; echo "часть 1: " . $val[1] . "\n"; echo "часть 2: " . $val[2] . "\n"; echo "часть 3: " . $val[3] . "\n"; echo "часть 4: " . $val[4] . "\n\n"; } ?>

Результат выполнения выглядит следующим образом:

matched: <b>bold text</b>
part 1: <b>
part 2: b
part 3: bold text
part 4: </b>

matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: a
part 3: click me
part 4: </a>

PHP 正则表达式(PCRE)Регулярные выражения PHP (PCRE)

Другие расширения