Форум, знакомства, фото, чат, общение

Здравствуйте, гость ( Вход | Регистрация )

Приглашаем Информационных Партнеров!
> Случайные изображения












 
Reply to this topicStart new topic

> Достаем Из Переменной Нужную Нам Часть

шпунтик
сообщение 9.9.2009, 13:38
Сообщение #1


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



ввыбираем из выражения нужную нам часть

(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.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().
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 


Текстовая версия Сейчас: 21.1.2018, 13:52

Достаем Из Переменной Нужную Нам Часть - Форум




Рейтинг@Mail.ru Rambler's Top100

forum.ribca.net | Web Дизайн: WonderWorker | http://Ribca.Net