2011-01-26 22 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

東西...

並嘗試!希望它有幫助...