什么是正则表达式模式(在PHP中)用超链接替换字符串,其中URL之前的文本用作链接的锚文本?例如:
text a http://example.com ending text
成为
<a href="http://example.com">text a</a> ending text
换句话说,URL前面的文字 成为链接的锚文本。
我真正想要的是snipe的以下功能的变体 http://www.snipe.net/2009/09/php-twitter-clickable-links/ 但随着上面的扭曲。
答案 0 :(得分:3)
以下是snipe's twitterify()的修改版本:
<?php
function twitterify($ret) {
//
// Replace all text that precedes a URL with an HTML anchor
// that hyperlinks the URL and shows the preceding text as
// the anchor text.
//
// e.g., "hello world www.test.com" becomes
// <a href="www.test.com" target="_blank">hello world</a>
//
$ret = preg_replace("#(.*?)(http://)?(www\.[^ \"\t\n\r<]+)#", "<a href=\"http://\\3\" target=\"_blank\">\\1</a>", $ret);
// if anchor text is empty, insert anchor's href
$ret = preg_replace("#(<a href=\"(\w+://)?([^\"]+)\"[^>]+>)(</a>)#", "\\1\\3\\4", $ret);
$ret = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $ret);
$ret = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $ret);
return $ret;
}
使用test()
...
function test($str) {
print "INPUT: \"" . $str . "\"\nOUTPUT: " . twitterify($str) . "\n\n";
}
// tests
test("www.foo.com");
test("www.foo.com fox");
test("www.test.com fox jumped over www.foo.com");
test("fox jumped over www.test.com the fence www.foo.com");
?>
...导致以下打印输出。
INPUT: "www.foo.com"
OUTPUT: <a href="http://www.foo.com" target="_blank">www.foo.com</a>
INPUT: "www.foo.com fox"
OUTPUT: <a href="http://www.foo.com" target="_blank">www.foo.com</a> fox
INPUT: "www.test.com fox jumped over www.foo.com"
OUTPUT: <a href="http://www.test.com" target="_blank">www.test.com</a><a href="http://www.foo.com" target="_blank"> fox jumped over </a>
INPUT: "fox jumped over www.test.com the fence www.foo.com"
OUTPUT: <a href="http://www.test.com" target="_blank">fox jumped over </a><a href="http://www.foo.com" target="_blank"> the fence </a>
在ideone上进行了测试。
编辑:更新了符合新要求的代码