[英]preg_match expression how to ignore a character
我绝对是新手,还没有冒险到这个级别,但是需要能够将域名缩减为仅用于搜索功能的主机名。 我看了一下,发现这低于相当多的作品,除非域名有什么-
它。 因此, http://www.example.com
www.exa-mple.com
会像www.example.com
一样简化为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];
}
表达式中必须更改什么才能使其接受域名中的-
?
您的正则表达式当前允许使用字符_
并不允许使用字符-
,这意味着它接受无效的URL。 您可以通过以下小组更正此问题:
$pattern = '/[a-z0-9-]+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
请注意,这仍然存在问题。 首先,域名不允许以连字符开头或结尾。 其次,您当前允许TLD中的任何字符,而它们仅包含字母。
最好的解决方案是使用适当的URL解析库,而不要自己尝试这样做。
$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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.