Разбор html-кода ссылки -> href + text

young

Новичок
Разбор html-кода ссылки -> href + text

Возможно, уже придуманы способы разбора таких вот строк

<a href="http://site.com" alt="link end with </a>" title="another href <a>example</a>" target=link1>link text</b></a>

Надо выдрать собсно href и сам текст ссылки
 

svetasmirnova

маленький монстрик
На phpclasses.org поищи класс tag: убегаю, нет времени ссылку искать ;) плюс всякие xml-разборщики
 

Eugene Bond

sudo rm - rf /
на пока так:
вырезает link text (ну и соответственно находит саму сцылку)
надо подумать как еще хреф сюда впихнуть чтобы сразу вываливалса. пока все мои попытки заканчивались зависанием комода..

Код:
<a(?:\s+\w+=(?:"[^"]+"|[\d\w]+))+>(.*?)</a>
-~{}~ 14.03.05 14:27:

Кстати, по-хорошему еще можно добавить условие и для одинарных кавычек
 

Eugene Bond

sudo rm - rf /
ну, если упростить задачу и предположить что хреф всегда первый, то получается так:

Код:
<a(?:\s+href=("[^"]+"|[\d\w]+))?(?:\s+\w+=(?:"[^"]+"|[\d\w]+))*>(.*?)</a>
-~{}~ 14.03.05 14:31:

попробуй убрать ?:
 

Eugene Bond

sudo rm - rf /
Янг, ну поменяй в "[^"]+" плюс на звезду! как меленький..

-~{}~ 14.03.05 14:38:

Кстати, если тебе "не нада таких предположний", то:
Код:
<a(?:\s+((\w+)=("[^"]*"|[\d\w]+)))*>(.*?)</a>
и по-группам бежиш ищешь href (и вообще все параметры)
 

young

Новичок
$text = '<a href="dite.com" alt="1">bb</a>';
preg_match('#<a(?:\s+((\w+)=("[^"]*"|[\d\w]+)))*>(.*?)</a>#mis', $text, $t);


Array
(
[0] => <a href="dite.com" alt="1">bb</a>
[1] => alt="1"
[2] => alt
[3] => "1"
[4] => bb
)


И кого где тут искать?

-~{}~ 14.03.05 14:52:

strip_tags - получить текст ссылки
опять неправильно
<a href="1"><b>text</b></a>
 

Фанат

oncle terrible
Команда форума
young, может, проще сделать посимвольный разбор, чем регуляркой? :)
 

young

Новичок
young, может, проще сделать посимвольный разбор, чем регуляркой? :)
да уже была такая мысль,
но е-мае!
я думал что это тривиальная задача, которую все давным давно решили!!!
 

Eugene Bond

sudo rm - rf /
Значит такой байдой нарезаешь ссылки, а потом из них уже вторым проходом достаешь хреф

<a(?:\s+\w+=(?:"[^"]*"|[\d\w]+))*>(.*?)</a>
 

young

Новичок
preg_match('/<a\s+(?:href="([^"]*)")(?:.*)>(.+)<\/a>/mis', $text, $t);
<?php
$text = '<a href=a.com>test</a>';
preg_match('/<a\s+(?:href="([^"]*)")(?:.*)>(.+)<\/a>/mis', $text, $t);
print_r($t);
?>

не работает ;)

-~{}~ 14.03.05 15:39:

Eugene Bond
аналогично и твой
 
Сверху