我绝对是一个新手,并没有冒险到这个级别,但需要能够将一个域剥离到只有搜索功能的主机名。我查看并发现下面的内容非常有用,除非域名中有任何-
。因此,http://www.example.com
与example.com
一样下调到www.example.com
,但www.exa-mple.com
变为example.com
。
$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = $myurl;
if (preg_match($pattern, $url, $matches) === 1) {
$mydom = $matches[0];
}
表达式中必须更改哪些内容才能接受域名中的-
?
答案 0 :(得分:5)
答案 1 :(得分:0)
您的正则表达式目前允许使用字符_
并禁止使用字符-
,这意味着它接受无效的网址。您可以使用以下组进行更正:
$pattern = '/[a-z0-9-]+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
请注意,这仍然存在问题。首先,不允许域名以连字符开头或结尾。其次,您目前允许使用TLD中的任何字符,而它们只包含字母。
最好的解决方案是使用正确的URL解析库,而不是自己尝试这样做。
答案 2 :(得分:0)
$sites = array('mysite.com',
'www.mysite.com',
'http://www.mysite.com',
'www.my-site.com',
'sub.folder.2.example.com',
'http://www.mysite.com/argh/index.php');
$reg = '%^(?:http://)?(?:[^.]*\.)*([a-zA-Z0-9_-]+\.[a-zA-Z0-9]+)%m';
foreach($sites as $site)
{
if(preg_match($reg,$site,$matches))
{
echo $matches[1],PHP_EOL;
}
}
输出:
mysite.com
mysite.com
mysite.com
my-site.com
examle.com
mysite.com