Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cсылки вида index.html?ID=разные цифры (регулярные выражения)
 
 автор: Volodja   (28.08.2005 в 06:06)   письмо автору
 
 

Не могу разобраться, мне нужно вытащить из документа все ссылки вида 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];}
?>

   
 
 автор: Sfinks   (28.08.2005 в 11:18)   письмо автору
 
   для: Volodja   (28.08.2005 в 06:06)
 

"?" -специальный символ. Возможно будет работать так:
preg_match_all("|index.html\?ID=[0-9]|i",$bufer,$urllink,PREG_PATTERN_ORDER);

   
 
 автор: Volodja   (30.08.2005 в 06:38)   письмо автору
 
   для: Sfinks   (28.08.2005 в 11:18)
 

Спасибо за помощь. Все получилось. Проблема была в отсутствии символов ? и +

   
 
 автор: cheops   (28.08.2005 в 11:22)   письмо автору
 
   для: 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$icount($urllink[0]); $i++)
{
echo 
$urllink[0][$i];}
?>

Хотя возможно проблема и не в этом нужен бы кусочек HTML-кода для отладки.

   
 
 автор: Евгений Петров   (28.08.2005 в 14:43)   письмо автору
 
   для: cheops   (28.08.2005 в 11:22)
 

cheops я уже как то спрашивал но вы не ответили, что значит PREG_PATTERN_ORDER и что ещё можно вместо него поставить? Спасибо.

   
 
 автор: 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>"
    
$outPREG_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>"
    
$outPREG_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, если во время выполнения возникли какие-либо ошибки.

   
 
 автор: Евгений Петров   (28.08.2005 в 17:33)   письмо автору
 
   для: Sfinks   (28.08.2005 в 16:01)
 

Большое спасибо!

   
 
 автор: cheops   (29.08.2005 в 01:06)   письмо автору
 
   для: Евгений Петров   (28.08.2005 в 14:43)
 

Хм... имеется ввиду ссылка http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=6479? Я ответил, но слишком кратко :))) Думаю после ответа Sfinks неясностей не осталось :)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования