从 PHP 中的文本中提取 URL
我有这段文字:
$string = "this is my friend's website http://example.com I think it is coll";
如何将链接提取到另一个变量中?
我知道它应该通过使用正则表达式,特别是,但我不知道如何?preg_match()
我有这段文字:
$string = "this is my friend's website http://example.com I think it is coll";
如何将链接提取到另一个变量中?
我知道它应该通过使用正则表达式,特别是,但我不知道如何?preg_match()
可能最安全的方法是使用WordPress中的代码片段。下载最新的一个(当前为3.1.1),并查看wp-include/formatting.php。有一个名为 make_clickable 函数,它具有参数的纯文本并返回格式化的字符串。您可以获取用于提取 URL 的代码。不过这很复杂。
这一行正则表达式可能会有所帮助。
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);
但是这个正则表达式仍然无法删除一些格式错误的URL(例如。 ).http://google:ha.ckers.org
另请参见:如何模拟堆栈溢出自动链接行为
我试图按照Nobu所说的,使用Wordpress,但是由于依赖于其他WordPress函数,我选择使用Nobu的正则表达式preg_match_all()
并将其转换为函数,使用preg_replace_callback()
;一个函数,现在用可点击的链接替换文本中的所有链接。它使用匿名函数,因此您需要PHP 5.3,或者您可以重写代码以使用普通函数。
<?php
/**
* Make clickable links from URLs in text.
*/
function make_clickable($text) {
$regex = '#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#';
return preg_replace_callback($regex, function ($matches) {
return "<a href=\'{$matches[0]}\'>{$matches[0]}</a>";
}, $text);
}