如果文本前面有regex
,我正在使用http://
将纯文本更改为网址。这工作正常,但我不想让它们成为链接,如果此链接是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 :(得分:3)
您应该可以使用以下内容:
/((http|https):\/\/(?!www.google.co.uk)[\w\.\/\-=?#]+)/
http 和 https
或
/(http:\/\/(?!www.google.co.uk)[\w\.\/\-=?#]+)/
仅限 http
然后,您可以将www.google.co.uk
替换为您的域名(使用您网站上显示的格式)。
在下面使用它将匹配除http://www.google.co.uk
...
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);
答案 1 :(得分:0)
您可以使用您的域名添加否定前瞻(?!..)
(未跟随),这是一个超级通用模式*中的示例来检测网址:
$string = preg_replace('~\bhttps?://(?:www\.)?(?!mydomain.com)[^\s/]+(?:/[^\s/]+)*/?~i',
'<a href="$0">$0</a>', $string );
*这意味着我没有花时间去网址模式,如果找到更好的模式,请更改它。它仅用于说明如何排除您的域名。