我正在寫一個正則表達式查找/替換,它將在<span>
尚不存在的文件中的每個<a href>
中插入一個<span>
。這將允許其他標記是在<a href>
像<img>
,<b>
等正則表達式匹配不包含其他標記的HTML標記
目前我有這個表達式:
查找:(<a[^>]+?style=".*?color:#(\w{6}).*?".*?>)(.+?)(<\/a>)
替換:'$1<span style="color:#$2;">$3</span>$4'
它的偉大工程,除非我跑過來相同的文件,它會在<span>
中插入一個<span>
,它會變得混亂。
目標示例:
我們希望它忽略這一點:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;"><span style="color:#bfbcba;">Howdy</span></a>
但不是這樣的:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;">Howdy</a>
或者這樣:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;"><img src="myimg.gif" />Howdy</a>
--EDIT- -
使用作爲意見建議的PHP DOM庫,這是我到目前爲止有:
$doc = new DOMDocument();
$doc->loadHTML($input);
$tags = $doc->getElementsByTagName('a');
foreach ($tags as $tag) {
$spancount = $tag->getElementsByTagName("span")->length;
if($spancount == 0){
$element = $doc->createElement('span');
$tag->appendChild($element);
}
}
echo $doc->saveHTML();`
目前,如果有一個錨內的跨度它會檢測,如果有,它會追加一個跨越到錨的內部,但是,我還沒有弄清楚如何獲得跨度內錨的原始內容。
在哪語言?可能是Perl或PHP或Javascript? – 2010-08-18 15:54:01
請勿使用正則表達式來匹配HTML。使用HTML解析器。 – 2010-08-18 15:54:07
使用正則表達式來解析XML(HTML)是一個壞主意。使用HTML解析器。 – 2010-08-18 15:54:58