1

这是我从 stackoverflow 的其他地方获取的一段代码,并对其进行了一些修改。它为字符串中的所有链接添加一个类:

// adds class of ah_link to outbound links,
// This is intended as for use with tracking clicks on outbound links
private function add_tracking_link($html) {
    // no extra class on these websites!
    $follow_list = array($_SERVER['HTTP_HOST']);
    return preg_replace('%(<a\s*(?!.*\brel=)[^>]*)(href="https?://)((?!(?:(?:www\.)?'.implode('|(?:www\.)?',$follow_list).'))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>%', '$1$2$3"$4 class="ah_link ">',
        $html);
}

它工作得很好,但是如果已经有一个类,在这种情况下它只是使属性加倍,就会出现问题。

我想知道是否有一种方法可以将新的类值添加到已经存在的类属性中?这超出了我的正则表达式安全区。

4

1 回答 1

1

首先从 $html 中删除类属性以确保没有其他类属性,然后执行您的正则表达式,如下所示:

$out = preg_replace('/(<a[^>]*?)(class\s*\=\s*\"[^\"]*?\")([^>]*?>)/','$1$3',$html);
$return = preg_replace(<your regex here>,'<your replacement class here>',$out);

IE:

$out = preg_replace('/(<a[^>]*?)(class\s*\=\s*\"[^\"]*?\")([^>]*?>)/','$1$3',$html);
return preg_replace('%(<a\s*(?!.*\brel=)[^>]*)(href="https?://)((?!(?:(?:www.)?'.implode('|(?:www\.)?',$follow_list).'))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>%',
'$1$2$3"$4 class="ah_link ">',$out);
于 2012-05-30T15:06:19.090 回答