使用正則表達式可能不是解決這個問題的最好辦法,但這裏是一個快速的解決方案:
function link_keywords($str, $keyword, $url) {
$keyword = preg_quote($keyword, '/');
$url = htmlspecialchars($url);
// Use split the string on all <a> tags, keeping the matched delimiters:
$split_str = preg_split('#(<a\s.*?</a>)#i', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
// loop through the results and process the sections between <a> tags
$result = '';
foreach ($split_str as $sub_str) {
if (preg_match('#^<a\s.*?</a>$#i', $sub_str)) {
$result .= $sub_str;
} else {
// split on all remaining tags
$split_sub_str = preg_split('/(<.+?>)/', $sub_str, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($split_sub_str as $sub_sub_str) {
if (preg_match('/^<.+>$/', $sub_sub_str)) {
$result .= $sub_sub_str;
} else {
$result .= preg_replace('/'.$keyword.'/', '<a href="'.$url.'">$0</a>', $sub_sub_str);
}
}
}
}
return $result;
}
的總體思路是分裂串入鏈接和一切。然後將鏈接標記之外的所有內容分解爲標記和純文本,並將鏈接插入純文本。這將阻止[p class =「keyword」]擴展爲[p class =「[a href =」url「] keyword [/ a]」]。
再次,我會嘗試找到一個不涉及正則表達式的簡單解決方案。
無法使用「前視」和「後視」功能來說明匹配圖案的周圍環境嗎? – Joe 2009-01-04 04:35:26