對於正則表達式我還是比較新的,並且覺得我的代碼太貪婪。我正在嘗試爲一段代碼中的現有鏈接添加一個id屬性。我的功能是這樣的:將id屬性添加到通過PHP正則表達式的超鏈接
function addClassHref($str) {
//$str = stripslashes($str);
$preg = "/<[\s]*a[\s]*href=[\s]*[\"\']?([\w.-]*)[\"\']?[^>]*>(.*?)<\/a>/i";
preg_match_all($preg, $str, $match);
foreach ($match[1] as $key => $val) {
$pattern[] = '/' . preg_quote($match[0][$key], '/') . '/';
$replace[] = "<a id='buttonRed' href='$val'>{$match[2][$key]}</a>";
}
return preg_replace($pattern, $replace, $str);
}
這增加了我想要的id標籤,但它打破了超鏈接。例如:
如果原來的代碼是:<a href="http://www.google.com">Link</a>
而不是<a id="class" href="http://www.google.com">Link</a>
這是給 <a id="class" href="http">Link</a>
任何建議或想法?
'id'屬性必須是唯一的。你應該使用['preg_replace_callback'](http://php.net/preg_replace_callback)而不是首先匹配,然後使用['preg_replace'](http://php.net/preg_replace)。 – mario
你沒有要求它,而對於輸出修改它通常是愚蠢的,所以評論:沒有正則表達式,這將更簡單,例如QueryPath'htmlqp($ html) - > find(「a」)FOREACH attr(「id」,「buttonRed」。($ i ++));' – mario