2013-07-24 32 views
0

如果文本前有http://,我正在使用regex将纯文本更改为url。这工作正常,但我不想让他们成为一个链接,如果这个链接是internal(所以包含我的网站名称的链接)... 所以我只希望它发生,如果它是一个外部链接。外部链接的正则表达式:如何为我自己的链接创建一个例外?

我该怎么做?我尝试在http之前添加一个!,但它不起作用。有人可以帮我吗?这是我在用的:

function wpse107488_urls_to_links($string) { 

    $string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2", $string); 

    $string = preg_replace("/([\w]+:\/\/[\w-?&;%#~=\.\/\@]+[\w\/])/i", "<a target=\"_blank\" title=\"" . __('Visit Site', 'your-textdomain') . "\" href=\"$1\">$1</a>", $string); 

    return $string; 
} 

编辑:我使用的是不同的功能,可从我的内部链接太多的链接(也应该是这样),但我认为这两个功能是相互阻塞其他。这就是为什么我给我的所有内部链接上课。我可以使用这些类排除它们吗?

+0

你可以尝试各种不同的技术。这里有一个很好的链接,用jQuery来说明这些问题http://css-tricks.com/snippets/jquery/target-only-external-links/,好像你在技术#3中的相关内容 – sulfureous

+0

谢谢,但它是一个WordPress站点我正在使用PHP,而不是jQuery。 – Johan

+0

WordPress使用jQuery和PHP,所以我不知道你的意思是“不使用”jQuery – sulfureous

回答

1

您应该能够使用以下命令:

/((http|https):\/\/(?!www.google.co.uk)[\w\.\/\-=?#]+)/HTTPHTTPS

OR

/(http:\/\/(?!www.google.co.uk)[\w\.\/\-=?#]+)/ FOT HTTP只有

然后,您可以将www.google.co.uk替换为您的域名(格式为在您的网站上显示)。

用于以下它将匹配除了http://www.google.co.uk所有URL ...

A few websites to test the regex http://www.google.co.uk http://www.myspace.com http://facebook.com http://www.youtube.com/watch?v=video32 it should have matched all but the google URL. 

上述正则表达式也将匹配YouTube视频等与GET附加条件和内部链接(即#

更新

以下正则表达式将替换所有从http://开始的外部链接或www,并在新窗口/选项卡中打开URL的锚标记。

$string = preg_replace("/((http:\/\/|www)(?!mydomain\.com)[\w\.\/\-=?#]+)/", "<a target='_blank\' href='$1'>$1</a>", $string); 
+0

不工作是什么意思? – Steven

+0

那么,我自己的链接仍然受到影响。不是一个变化... – Johan

+0

你能给我一个你的链接和外部链接的例子吗? – Steven

0

您可以添加一个负先行(?!..)(后面没有)与您的域名,在一个超级通用的模式为例*检测网址:

$string = preg_replace('~\bhttps?://(?:www\.)?(?!mydomain.com)[^\s/]+(?:/[^\s/]+)*/?~i', 
         '<a href="$0">$0</a>', $string); 

*这意味着我没有如果你发现了一个更好的模式,那就改变它,花时间去寻找一个url模式。这只是为了说明如何排除你的域名。

+0

不要忘记https-link的可能性;) –

+0

谢谢,但它不工作。同样的问题存在...也许这是因为我不使用www,而是使用http://mydomain.com代替?为什么不能这样工作? – Johan

+0

答案是一个很好的提示,你必须做的。请阅读正则表达式的手册,知道你必须改变什么... –