|
|
|
|
|
для: Sfinks
(28.08.2005 в 11:18)
| | Спасибо за помощь. Все получилось. Проблема была в отсутствии символов ? и + | |
|
|
|
|
|
|
|
для: Евгений Петров
(28.08.2005 в 14:43)
| | Хм... имеется ввиду ссылка http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=6479? Я ответил, но слишком кратко :))) Думаю после ответа Sfinks неясностей не осталось :))) | |
|
|
|
|
|
|
|
для: Sfinks
(28.08.2005 в 16:01)
| | Большое спасибо! | |
|
|
|
|
|
|
|
для: Евгений Петров
(28.08.2005 в 14:43)
| | preg_match_all
(PHP 3>= 3.0.9, PHP 4 , PHP 5)
Описание
int preg_match_all ( string pattern, string subject, array matches [, int flags [, int offset]])
Ищет в строке subject все совпадения с шаблоном pattern и помещает результат в массив matches в порядке, определяемом комбинацией флагов flags.
После нахождения первого соответствия последующие поиски будут осуществляться не с начала строки, а от конца последнего найденного вхождения.
Дополнительный параметр flags может комбинировать следующие значения (необходимо понимать, что использование PREG_PATTERN_ORDER одновременно с PREG_SET_ORDER бессмысленно):
PREG_PATTERN_ORDER
Если этот флаг установлен, результат будет упорядочен следующим образом: элемент $matches[0] содержит массив полных вхождений шаблона, элемент $matches[1] содержит массив вхождений первой подмаски, и так далее.
<?php
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] содержит массив полных вхождений шаблона, а элемент $out[1] содержит массив подстрок, содержащихся в тегах.
PREG_SET_ORDER
Если этот флаг установлен, результат будет упорядочен следующим образом: элемент $matches[0] содержит первый набор вхождений, элемент $matches[1] содержит второй набор вхождений, и так далее.
<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=\"left\">this is a test</div>",
$out, PREG_SET_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $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] содержит второй набор вхождений, и так для каждого найденного набора.
PREG_OFFSET_CAPTURE
В случае, если этот флаг указан, для каждой найденной подстроки будет указана ее позиция в исходной строке. Необходимо помнить, что этот флаг меняет формат возвращаемых данных: каждое вхождение возвращается в виде массива, в нулевом элементе которого содержится найденная подстрока, а в первом - смещение. Данный флаг доступен в PHP 4.3.0 и выше.
В случае, если никакой флаг не используется, по умолчанию используется PREG_PATTERN_ORDER.
Поиск осуществляется слева направо, с начала строки. Дополнительный параметр offset может быть использован для указания альтернативной начальной позиции для поиска. Аналогичного результата можно достичь, заменив subject на substr()($subject, $offset). Дополнительный параметр offset доступен, начиная с PHP 4.3.3.
Возвращает количество найденных вхождений шаблона (может быть нулем) либо FALSE, если во время выполнения возникли какие-либо ошибки. | |
|
|
|
|
|
|
|
для: cheops
(28.08.2005 в 11:22)
| | cheops я уже как то спрашивал но вы не ответили, что значит PREG_PATTERN_ORDER и что ещё можно вместо него поставить? Спасибо. | |
|
|
|
|
|
|
|
для: Volodja
(28.08.2005 в 06:06)
| | Дело в том, что конструкция в квадратных скобках [] означает всегда один символ, но который может принимать любое из значений в квадратных скобках, сколько цифр в параметре ID? Наверное следует добавить +
<?php
$bufer = file_get_contents("http://adressites.ru");
preg_match_all("|index.html?ID=[0-9]+|i",$bufer,$urllink,PREG_PATTERN_ORDER);
for ($i=0; $i< count($urllink[0]); $i++)
{
echo $urllink[0][$i];}
?>
|
Хотя возможно проблема и не в этом нужен бы кусочек HTML-кода для отладки. | |
|
|
|
|
|
|
|
для: Volodja
(28.08.2005 в 06:06)
| | "?" -специальный символ. Возможно будет работать так:
preg_match_all("|index.html\?ID=[0-9]|i",$bufer,$urllink,PREG_PATTERN_ORDER);
|
| |
|
|
|
|
|
|
| Не могу разобраться, мне нужно вытащить из документа все ссылки вида index.html?ID=разные цыфры
Пишу вот что (пробывал по-разному писать регулярные выражениями, но никак не выходит, выводит пустую строку):
<?php
$bufer = file_get_contents("http://adressites.ru");
preg_match_all("|index.html?ID=[0-9]|i",$bufer,$urllink,PREG_PATTERN_ORDER);
for ($i=0; $i< count($urllink[0]); $i++)
{
echo $urllink[0][$i];}
?> | |
|
|
|
|