URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5538
[ Назад ]

Исходное сообщение
"выдрать адреса ссылок"

Отправлено mishgan , 08-Фев-08 11:39 
Пытаюсь выдрать со странички адреса ссылок делаю так...
preg_match_all('/href[ ]*=[ ]*[\'"`]{0,1}(.+)[\'"` ]{0,1}.*>/', $str, $ara,PREG_PATTERN_ORDER);
потом обрабатываю массив $ara[1]. Но чтото не работает. Если мы имеем например ссылки
<a href="index.php" >Главная </a> ..... <a href="news.php" >Новости</a> и т.д.
Короче скрипт выдает такую строчку "index.php' >Главная</a><b></td></"
Коче не дает нужного результата

Содержание

Сообщения в этом обсуждении
"выдрать адреса ссылок"
Отправлено angra , 09-Фев-08 02:28 
Пых и регексы, выглядит кошмарно. И после такого некоторые не понимают в чем преимущество перла в этой области.
Не знаю есть ли туториалы для пыха по регексам, но могу порекомедовать man perlre и "Mastering regular expressions" O'Reilly. Особое внимание обратить на понятие жадности(greedy) и вообще на механику регексов. В простом издложении на вашем примере
1. .+ захватывает все до конца строки.
2. проверяется совпадение части регекса после .+
3. если совпадения не произошло, то .+ отдает один символ и идет возврат к пункту 2, до тех пор пока в .+ есть хоть один символ(ибо +, а не *)
Не знаю поддерживается ли в пыхе возможность обрезать жадность, но в перле это делается добавлением ? после квантифаера. То есть вместо .+ ставим .+?. Кроме того обычная практика вместо "." использовать класс ограничтителей, например вместо .+ поставить [^'">]+