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

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

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

 

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

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

тема: Вырезать необходимые ссылки
 
 автор: wUPS   (16.12.2007 в 13:56)   письмо автору
 
 

Есть страница, из которой нужно вырезать ссылки вида

<a href="http://www.site.ru/site/[\d]/[\d].html">ТЕКСТ</a>


пробую так:

$links = preg_split("#<a href=\"http://www.site.ru/site/(\d+)/(\d+)\.html\">.+</a>#i", file_get_contents("1.htm")); 


мне это выдает всю страницу, разбитую на 2 части, причем совершенно без логики.
В чем ошибка, подскажите?

   
 
 автор: kasmanaft   (16.12.2007 в 14:10)   письмо автору
 
   для: wUPS   (16.12.2007 в 13:56)
 

>> мне это выдает всю страницу, разбитую на 2 части
preg_split() для этого и применяется... Используйте preg_match_all()

А разбивает на две части, потому что работает в жадном режиме.
Добавте модификатор "U" или добавте "вопрос" между угловых скобок: ....)/(\d+)\.html\">.+?<......

   
 
 автор: wUPS   (16.12.2007 в 14:23)   письмо автору
 
   для: kasmanaft   (16.12.2007 в 14:10)
 


preg_match_all("#<a href=\"http://www.site.ru/site/(\d+)/(\d+)\.html\">.+</a>#i",  file_get_contents("1.htm"), $links);


почему в таком варианте каждый элемент массива $links[0] содержит несколько ссылок?
И в добавок, проверку прошли элементы вида

<a href="/list/9.html">9</a>

?

   
 
 автор: kasmanaft   (16.12.2007 в 16:29)   письмо автору
 
   для: wUPS   (16.12.2007 в 14:23)
 

>>почему в таком варианте каждый элемент массива $links[0] содержит несколько ссылок?
Вот, из-за этого модификатора они и попали...

С модификатором будет выглядеть вот так:
<a href=\"http://www.site.ru/site/(\d+)/(\d+)\.html\">.+</a>#iU
Или с вопросом:
<a href=\"http://www.site.ru/site/(\d+)/(\d+)\.html\">.+?</a>#i


UPD.. упс.. неправильно понял, похоже, "16.12.2007 в 14:30".. Но Unkind уже пояснил.

   
 
 автор: wUPS   (16.12.2007 в 14:30)   письмо автору
 
   для: kasmanaft   (16.12.2007 в 14:10)
 

>>>
>Добавте модификатор "U" или добавте "вопрос" между угловых скобок: ....)/(d+).html">.+?<......

отлично, спасибо. попрошу лишь, если не сложно, объяснить смысл этого ? илиU :)

   
 
 автор: Unkind   (16.12.2007 в 16:27)   письмо автору
 
   для: wUPS   (16.12.2007 в 14:30)
 

U - один из модификаторов: http://php.net/manual/en/reference.pcre.pattern.modifiers.php
Снимает "жадность", т.е. паттерн "/a.*b/" в строке "a_b_b" найдет совпадение "a_b_b", а с модификатором найдет только "a_b".
А если квантификатор (в данном случае "*") сопровождается вопросительным знаком, то это тоже снимает "жадность".

   
Rambler's Top100
вверх

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