Главная
домен в подарок! подробнее

каталог сайтов www.poiu.ru закрыт. копия сайта www.myphp.net.ru сделана мной без согласия автора, подробнее тут


preg_match_all

(PHP 3>= 3.0.9, PHP 4 >= 4.0.0)

preg_match_all -- Осуществляет глобальный поиск с помощью регулярных выражений

Описание

int preg_match_all (string pattern, string subject, array matches [, int order])

Ищет в subject все строки, соответствующие регулярному выражению, заданному в pattern, и  оставляет их в matches в соответствии с определением order.

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

Параметр order может быть двух видов:

 

PREG_PATTERN_ORDER

Формирует результат таким образом, что $matches[0] содержит строки, соответствующие всему шаблону, а $matches[1] содержит строки, соответствующие первому введенному подшаблону (subpattern) и так далее.

 
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
    "<b>example: </b><div align=left>this is a test</div>",
    $out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n"

Этот пример выведет:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
Таким образом, $out[0] - массив из строк, соответствующих всему шаблону, а $out[1] содержит массив строк, заключенных между тегами.

PREG_SET_ORDER

Формирует результат таким образом, что $matches[0] содержит первое соответствие, $matches[1] - второе соответствие и так далее.

 
preg_match_all ("|<;[^>]+>(.*)</[^>]+>|U",
    "<b>example: </b><div align=left>this is a test</div>",
    $out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";

Пример выведет:

<b>example: </b>, example:
<div align=left>this is a test</div>, this is a test

 

В этом случае $matches[0] является первым найденным соответствием, а $matches[0][0] содержит текст, соответствующий всему шаблону, $matches[0][1] - текст, соответствующий первому подшаблону и так далее. Аналогично, $matches[1] является вторым найденным соответствием и далее.

Если order не указан, то подразумевается PREG_PATTERN_ORDER.

Функция возвращает число соответствий всему шаблону или FALSE, если таковых не было обнаружено.

 

Пример 1. Получение номера телефона из текста

preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
                "Call 555-1212 or 1-800-555-1212", $phones);

 

Пример 2. Нахождение соответствия между HTML тегами.

// The \\2 is an example of backreferencing. This tells pcre that
// it must match the second set of parentheses in the regular
// expression itself, which would be the ([\w]+) in this case.
// The extra backslash is
// required because the string is in double quotes.
$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().

<-Назад

Список всех функций

Если вы заметили ошибку, неточность, либо хотите опубликовть свой перевод неуказанных в разделе функций, пожалуйста, напишите по этому адресу.