2011-01-26 62 views
1

我试图使用PHP的preg-match-all功能分割一些HTML内容:PHP preg_match_all:分裂列表项和子列出

<li class="cat-item"><a title="blabla" href="#">parent 1</a> 
    <ul class="children"> 
     <li class="cat-item"><a title="" href="#">child 1</a></li> 
    </ul> 
</li> 
<li class="cat-item cat-item-4"><a title="blabla" href="#">father 2</a> 
    <ul class="children"> 
     <li class="cat-item"><a title="" href="#">child 1</a></li> 
     <li class="cat-item"><a title="bla" href="#">child 2</a></li> 
    </ul> 
</li> 

我希望能够更改链接的描述,例如:

<a title="" href="#">child 1</a> 

<a title="" href="#">I changed that</a> 

,同时保持原有的HTML的结构。 到目前为止,我成功使用分割链接:

$results = preg_match_all('/<a\s[^>]*href\s*=\s*(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU', $html, $tokens); 

foreach ($tokens[0] as $category) 
{ 
    echo $category.'<br>'; 
} 

这样做的缺点是它丢弃的孩子名单,并输出在同级别的所有列表项;父母和孩子之间没有区别。

任何想法保持原有的层次?

thanx :)

+0

这是一个正则表达式要做的非常辛苦的工作,在这种情况下用HTML解析器会更好(我非常赞成正则表达式,并且通常会打他们的角落,但是在这种类型中的筑巢,这是一场艰苦的斗争)。你想把什么东西放到锚上? – Orbling 2011-01-27 00:02:50

+0

thanx Orbling,我同意正则表达式是不正确的方式去解析HTML时,我开始玩domDocument,但没有得到我的观点迄今.. 我想实现的是与WordPress的wp_list_categories()函数;我需要翻译回应的结果;这个函数没有数组或对象的返回值,但只有回声:(所以我尝试创建一个dirthy修复:) :) – numediaweb 2011-01-27 01:02:17

回答

0

使用preg_replace替换字符串!这样的事情在这里:

$output = preg_replace("/^([123]0|[012][1-9]|31)(\\.|-|\/|,)(0[1-9]|1[012])(\\.|-|\/)(19[0-9]{2}|2[0-9]{3})$/","$1",$in_nn_date); 

,其中$ 1 $ 2为您搜索与正则表达式和分组的事情

最好的是,你使用一些在线编辑器或类似this one

东西...

并尝试!希望它有帮助...