uznay-chto-hochesh.narod.ru

-сайт для интересующихся людей

Учебник - справочник по PHP.

Здесь Вы найдете что хотели

Меню сайта
Главная
Введение
Справочник языка
Возможности РНР
Функции (справочник)
Расширение РНР 4.0
F.A.Q. частые вопросы
Приложения
Алфавитный указатель
Друзья сайта
сделай сайт сам! пособие по html
изучение html и web-дизайна для новичков
Бесплатная отправка смс на все операторы
Реклама
 
НазадВперёд

preg_match_all

(PHP 3>= 3.0.9, PHP 4)

preg_match_all - выполняет глобальный поиск совпадения регулярного выражения.

Описание

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

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

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

flags может быть комбинацией следующих флагов (обратите внимание, что нет смысла использовать PREG_PATTERN_ORDER вместе с PREG_SET_ORDER):

PREG_PATTERN_ORDER

Упорядочивает результаты таким образом, что $matches[0] это массив полных совпадений с патэрном, $matches[1] это массив строк, совпавших с первым субпатэрном в скобках, и так далее.
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] это второй набор совпадений, etc.

PREG_OFFSET_CAPTURE

Если этот флаг установлен, для каждого возникшего совпадения будет возвращено дополнительное строковое смещение. Заметьте, что это изменяет return-значение в массиве, где каждый элемент является массивом, состоящим из совпавшей строки в смещении 0 и её строкового смещения в subject - в смещении 1. Этот флаг доступен, начиная с PHP 4.3.0.

Если никакой флаг упорядочивания не задан, принимается 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-тэгами (greedy/жадный)
// \\2 это пример обратной ссылки/backreferencing. Это говорит pcre, что
// она обязана совпасть со вторым набором скобок в регулярном выражении,
// что будет в данном случае ([\w]+). Дополнительный backslash необходим,
// поскольку строка в двойных кавычках.
$html = "<b>bold text</b><a href=howdy.htm>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.htm>click me</a>
part 1: <a href=howdy.htm>
part 2: click me
part 3: </a>

См. также preg_match(), preg_replace() и preg_split().


Назад Оглавление Вперёд
preg_grep Вверхpreg_match

Хостинг от uCoz