从 PHP 中的文本中提取 URL

2022-08-30 10:52:19

我有这段文字:

$string = "this is my friend's website http://example.com I think it is coll";

如何将链接提取到另一个变量中?

我知道它应该通过使用正则表达式,特别是,但我不知道如何?preg_match()


答案 1

可能最安全的方法是使用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

另请参见:如何模拟堆栈溢出自动链接行为


答案 2

我试图按照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);
}

推荐