Подскажите как правильно написать регулярное выражение

L
На сайте с 17.05.2013
Offline
88
656

Есть такой код:

<li class="menu">

<a href="http://site.com">Название категории</a>

<div class=sub>

<div class="submenu">

<ul>

<li><a href="http://site.com/link1">Link1</li>

<li><a href="http://site.com/link2">Link2</li>

...................

<li><a href="http://site.com/linkN">LinkN</li>

</ul>

</div>

</div>

</li>

Нужно получить название категорий и ссылки на них. Подскажите как писать рег. выражение. Ведь там есть вложенные закрывающиеся теги <li>..

дани мапов
На сайте с 06.09.2012
Offline
204
#1

Точно без закрывающего тега "a" идет?

<li><a href="http://site.com/link1">Link1</li>

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
TF-Studio
На сайте с 17.08.2010
Offline
334
#2

simple html dom parser

будет проще для вас

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
siv1987
На сайте с 02.04.2009
Offline
427
#3


$data = array();
preg_match_all('#<li class="menu">.+?</div>\s*</li>#s', $str, $out);
foreach($out[0] as $v){
preg_match('#<li class="menu">\s*<a href="(.+?)".*?>(.*?)</a>#s', $v, $m);
$data['cat'] = $m[2];
$data['url'] = $m[1];
$data['links'] = array();

preg_match_all('#<li><a href="(.*?)".*?>(.*?)</a>#s', $v, $m);
for($i=0; $i<count($m[0]); $i++){
$data['links'][] = array($m[1][$i], $m[2][$i]);
}
}

print_r($data);

Хотя согласен, для вас проще будет парсить на html парсере. А лучше учите xpath запросы.

Cygnus
На сайте с 19.08.2012
Offline
45
#4

Если вы еще не нашли ответа или вам понадобилась новая регулярка, то вот вам инструмент http://regex101.com/

Ну очень хорошая штука для проверки всяких регулярок с генератором кода для питона, пхп и js

iOS приложения Оптимизация затрат на их создание

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий