正则表达式不匹配3个或更少字符的网址

时间:2016-03-01 19:07:09

标签: php regex

我的正则表达式与不超过3个字符的网址匹配。

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}

输入/输出(这很好): http://www.google.com //输出:google.com

但它失败了:

http://www.axe.com // Output: www.axe.com
http://www.ax.com // Output: www.ax.com
http://www.a.com // Output: www.a.com

它需要http:// out,但背后有额外的www

所以我把它改成了这个:

$pattern = '/\w+\..{2,3}(?:\..)?(?:$|(?=\/))/i';

现在一切正常但是:

http://www.google.co.uk // Output: .co.uk

仅当域必须包含部分时才匹配.co.uk

在不使用http://并使用正则表达式

的情况下删除wwwparse_url()的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

由于preg_replace甚至可以采用数组 - 你甚至不需要循环,你可以使用:

$url = preg_replace('/(?:https?:\/\/)?(?:www\.)?(.*)\/?$/i', '$1', $url);

您可以粘贴正则表达式here以查看其完成的内容。

答案 1 :(得分:1)

此正则表达式将提取不带http或https的域。

/(?<=http:\/\/www\.)([\S]+)|(?<=https:\/\/www\.)([\S]+)/gmis

请参阅https://regex101.com/r/lW5yD6/1