[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объясните как работает preg_match_all
alex455
Читаю я руководство по этой функции:
Цитата
Ищет в строке subject все совпадения с шаблоном pattern и помещает результат в массив matches в порядке, определяемом комбинацией флагов flags.

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

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

Это, конечно, всё понятно, но я не могу понять - по каким правилам найденные результаты заносятся в переменную $result[x][y]? Как понять, что в "x" идёт, а что в "y"?



Спустя 2 минуты, 30 секунд (30.09.2011 - 15:39) Winston написал(а):
А почему бы тебе не почитать книгу Дж. Фридл "Регулярные выражения" ?

Спустя 8 минут, 19 секунд (30.09.2011 - 15:48) VELIK505 написал(а):
Выполняет глобальный поиск шаблона в строке.
Я понимаю что php.net не сразу даёться всем. Но есть довольно не плохой сайтец php.su где всё довольно понятно описывается.
А именно в твоём случае ВОТЬ

Спустя 6 минут, 4 секунды (30.09.2011 - 15:54) Winston написал(а):
Цитата (VELIK505 @ 30.09.2011 - 15:48)
А именно в твоём случае ВОТЬ

Дык он оттуда цитату взял biggrin.gif

Спустя 2 минуты, 56 секунд (30.09.2011 - 15:57) VELIK505 написал(а):
А всё увидел=) Просто темы прочитал название и дал ответ на автомате. Ну а больше только на php.net или на примере показывать или книжку тобой предложеную почитать когда-то читал её до сих пор лежит в рабочей библиотеке. А как правило всё познаёться на практике.

Спустя 1 минута, 11 секунд (30.09.2011 - 15:58) Winston написал(а):
Цитата (VELIK505 @ 30.09.2011 - 15:57)
А как правило всё познаёться на практике.

Полностью поддерживаю smile.gif

Спустя 42 минуты, 3 секунды (30.09.2011 - 16:40) imbalance_hero написал(а):
alex455
$match[0] - полная строка
$match[x] - каждая по порядку скобка.
([0-9]{1,5}) - будет искаться цифры до 5 штук, и записываться в $match[1], следующая скобка в [2]

Спустя 49 минут, 4 секунды (30.09.2011 - 17:29) alex455 написал(а):
Цитата (Winston @ 30.09.2011 - 16:39)
А почему бы тебе не почитать книгу Дж. Фридл "Регулярные выражения" ?

Там, ведь, нет про PHP'шные регулярные выражения...

imbalance_hero, спасибо, буду пробовать разбираться.

Спустя 3 минуты, 3 секунды (30.09.2011 - 17:32) Winston написал(а):
Цитата (alex455 @ 30.09.2011 - 17:29)
Там, ведь, нет про PHP'шные регулярные выражения

Синтаксис регулярных выражений везде одинаков, что в PHP/JS/SQL
только ф-ии имеют разные названия.
PS: В третьем издании книги, PHP тоже есть.

Спустя 37 минут, 15 секунд (30.09.2011 - 18:09) alex455 написал(а):
Цитата (imbalance_hero @ 30.09.2011 - 17:40)
([0-9]{1,5}) - будет искаться цифры до 5 штук, и записываться в $match[1], следующая скобка в [2]

Какая скобка? То, что находится между "(" и ")"?

Спустя 37 минут, 37 секунд (30.09.2011 - 18:47) imbalance_hero написал(а):
alex455
() - эти скобки. Да, то, что между ними.

Спустя 3 часа, 2 минуты, 28 секунд (30.09.2011 - 21:49) Santehnick написал(а):

preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $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][0] у нас попадает вся строка которая удовлетворяет нашему шаблону, у нас получается таких строк две, это

<b>example: </b> и <div align=left>this is a test</div>, получается чтобы получить первую строку нужно обратиться к $out[0][0], а чтобы добраться до второй к $out[0][1] (то есть это <div align=left>this is a test</div>).

Также существуют подмаски, вот например в нашем примере это (.*) подмаска, выделяются подмаски при помощи круглых скобок, в таком случае вернется уже не вся строка, а только то, что указано в подмаске, в нашем примере текст (без тегов). Соответственно, чтобы получить "example:", который имеет индекс ноль в массиве нашей подмаски, мы должны обратиться к $out[1][0], а чтобы взять уже первый элемент из нашей подмаски, должны написать соответственно $out[1][1].

то есть если перевести на наш язык запись $out[1][1], будет звучать примерно так: Обратиться к первой подмаске и выбрать элемент из массива с индексом один.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.