我的正则表达式与不超过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://
并使用正则表达式
www
和parse_url()
的最佳方式是什么?
答案 0 :(得分:2)
由于preg_replace甚至可以采用数组 - 你甚至不需要循环,你可以使用:
$url = preg_replace('/(?:https?:\/\/)?(?:www\.)?(.*)\/?$/i', '$1', $url);
您可以粘贴正则表达式here以查看其完成的内容。
答案 1 :(得分:1)
此正则表达式将提取不带http或https的域。
/(?<=http:\/\/www\.)([\S]+)|(?<=https:\/\/www\.)([\S]+)/gmis