正则表达式找到没有http或www的URL

时间:2018-01-11 20:58:34

标签: php regex

我正在使用一些代码来尝试查找文本块中的所有网站网址。现在我们已经获得了适用于http://www.google.comwww.google.com格式的网址的检查,但我们正在尝试找到一个可以以{{1}格式找到网址的正则表达式}}

现在我们的正则表达式设置为搜索我们可以找到的每个域名,总共大约1400个,所以它看起来像这样:

google.com

除了要检查组中的所有1400个域(完整的东西大约是8400个字符)。当然它的运行速度很慢,我们已经有了简单检查10个左右最常用域名的想法,但我想先查看这里是否有更有效的方法来检查网站的这种特定格式网址,而不是单独列出每个网址。

2 个答案:

答案 0 :(得分:0)

您可以使用双遍搜索。

搜索每个类似URL的字符串,例如:

((http|https):\/\/)?([\w-]+\.)+[\S]{2,5}

在每个结果上进行一些非正则表达式检查,例如,足够的长度,是tld列表的最后一个点部分之后的文本等。

function isUrl($urlMatch) {
    $tldList = ['com', 'net'];
    $urlParts = explode(".", $urlMatch);
    $lastPart = end($urlParts);
    return in_array($lastPart, $tldList); 
}

答案 1 :(得分:0)

实施例

function get_host($url) {
    $host = parse_url($url, PHP_URL_HOST);
    $names = explode(".", $host);

    if(count($names) == 1) {
        return $names[0];
    }

    $names = array_reverse($names);
    return $names[1] . '.' . $names[0];
}

用法

echo get_host('https://google.com'); // google.com
echo "\n";
echo get_host('https://www.google.com'); // google.com
echo "\n";
echo get_host('https://sub1.sub2.google.com'); // google.com
echo "\n";
echo get_host('http://localhost'); // localhost

Demo