|
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(). <-Назад
Список всех функций Если вы заметили ошибку, неточность, либо хотите опубликовть свой перевод неуказанных в разделе функций, пожалуйста, напишите по этому адресу.
|