preg_match_all
(PHP 4, PHP 5) preg_match_all — Выполняет глобальный поиск шаблона в строке
Описание
int preg_match_all
( string $pattern
, string $subject
, array $&matches [, int $flags
[, int $offset
]] )
После нахождения первого соответствия последующие поиски будут осуществляться
не с начала строки, а от конца последнего найденного вхождения.
Дополнительный параметр flags
может комбинировать следующие значения
(необходимо понимать, что использование PREG_PATTERN_ORDER одновременно с PREG_SET_ORDER бессмысленно):
-
PREG_PATTERN_ORDER
-
Если этот флаг установлен, результат будет упорядочен следующим образом:
элемент $matches[0] содержит массив полных вхождений шаблона,
элемент $matches[1] содержит массив вхождений первой подмаски, и так далее.
-
PREG_SET_ORDER
-
Если этот флаг установлен, результат будет упорядочен следующим образом:
элемент $matches[0] содержит первый набор вхождений,
элемент $matches[1] содержит второй набор вхождений, и так далее.
В таком случае массив $matches[0] содержит первый набор вхождений, а именно:
элемент $matches[0][0] содержит первое вхождение всего шаблона,
элемент $matches[0][1] содержит первое вхождение первой подмаски, и так далее.
Аналогично массив $matches[1] содержит второй набор вхождений, и так для каждого найденного набора.
-
PREG_OFFSET_CAPTURE
-
В случае, если этот флаг указан, для каждой найденной подстроки будет указана
ее позиция в исходной строке. Необходимо помнить, что этот флаг меняет
формат возвращаемых данных: каждое вхождение возвращается в виде массива,
в нулевом элементе которого содержится найденная подстрока, а в первом - смещение.
Данный флаг доступен в PHP 4.3.0 и выше.
В случае, если никакой флаг не используется, по умолчанию используется
PREG_PATTERN_ORDER.
Поиск осуществляется слева направо, с начала строки. Дополнительный параметр
offset
может быть использован для указания альтернативной
начальной позиции для поиска. Дополнительный параметр
offset
доступен, начиная с PHP 4.3.3.
Замечание:
Использование параметра offset
не эквивалентно
замене сопоставляемой строки выражением substr($subject, $offset)
при вызове функции preg_match_all(), поскольку
шаблон pattern
может содержать такие условия как
^, $ или (?<=x).
Вы можете найти соответствующие примеры в описании функции preg_match().
Возвращает количество найденных вхождений шаблона (может быть нулем) либо
FALSE, если во время выполнения возникли какие-либо ошибки.
Пример #1 Получение всех телефонных номеров из текста.
<?php preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Call 555-1212 or 1-800-555-1212", $phones); ?>
Пример #2 Жадный поиск совпадений с HTML-тэгами
<?php // Запись \\2 является примером использования ссылок на подмаски. // Она означает необходимость соответствия подстроки строке, зафиксированной // второй подмаской, в нашем примере это ([\w]+). // Дополнительный слеш необходим, так как используются двойные кавычки.
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) { echo "matched: " . $matches[0][$i] . "\n"; echo "part 1: " . $matches[1][$i] . "\n"; echo "part 2: " . $matches[3][$i] . "\n"; echo "part 3: " . $matches[4][$i] . "\n\n"; } ?>
Результат работы примера:
matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: click me
part 3: </a>
Смотрите также preg_match(),
preg_replace(),
и preg_split().
|
|