2010-07-16 33 views
5

好吧,我已经做了这个功能,它可以很好地将pies.com或www.cakes.com等大多数网址转换为实际的链接标签。正则表达式的帮助 - 我怎样才能让一些url不跟?

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}到我的正则表达式?

这就是所谓的'回望'?

回答

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); 
+0

这个看上去很不错但是我遇到麻烦人物,似乎preg_replace_callback不接受“E”修饰,所以现在它被捕获'n'形成'\ n'新行? – Haroldo 2010-07-16 08:54:49

+0

你能提供你的输入字符串的例子吗?难以建立盲目的正则表达式:) – 2010-07-16 09:24:27

+0

啊这是我的错误,我是双线逃脱线条突破,你的解决方案非常有效,也感谢你也给马蒂他的帮助 – Haroldo 2010-07-16 09:30:59