帮助正则表达式 - 我怎么能让一些网址不跟随?

时间:2010-07-16 07:30:41

标签: javascript regex nofollow

好的,所以我已经使这个功能适用于将大多数网址(如pies.com或www.cakes.com)转换为实际的链接标记。

function render_hyperlinks($str){       
    $regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';    
    $str = preg_replace($regex,"'<a href=\"http://www.'.'$3'.'\" target=\"_blank\">'.strtolower('$3').'</a>'", $str);
    return $str;    
}

我想更新此功能,将no-follow标签添加到指向竞争对手的链接

所以我会将某些关键字(竞争对手名称)与nofollow相提并论,例如,如果我的网站是关于烘焙我可能想要:

no-follow any sites with the phrases 'bakingbrothers', 'mrkipling', 'lyonscakes'

是否可以将此if(contains x){ add y}实现到我的正则表达式中?

这就是所谓的“回顾”吗?

1 个答案:

答案 0 :(得分:2)

也许你正在寻找preg_replace_callback:

function link($matches)
{
    $str_return = '<a href="http://www.'.$matches[3].'" target="_blank"';
    if(in_array($matches[3], $no_follow_array))
    {
        $str_return .= ' no-follow';
    }
    $str_return .='>'.strtolower($matches[3]).'</a>';
}

$regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';    
$str = preg_replace_callback($regex,'link', $str);