【发布时间】:2010-12-07 15:41:09
【问题描述】:
我以前从未使用过正则表达式,我想知道如何在 PHP 中编写一个获取 URL 域的正则表达式。例如: http://www.hegnar.no/bors/article488276.ece --> hegnar.no
【问题讨论】:
我以前从未使用过正则表达式,我想知道如何在 PHP 中编写一个获取 URL 域的正则表达式。例如: http://www.hegnar.no/bors/article488276.ece --> hegnar.no
【问题讨论】:
您不需要为此任务使用正则表达式。
检查 PHP 的内置函数 parse_url http://php.net/manual/en/function.parse-url.php
【讨论】:
如果您专门处理 URL,请使用 parse_url()。
例如:
$url = "http://www.hegnar.no/bors/article488276.ece";
$url_u_want = parse_url($url, PHP_URL_HOST);
编辑: 取出 www。前面,使用:
$url_u_want = preg_replace("/^www\./", "", $url_u_want);
【讨论】:
$page = "http://google.no/page/page_1.html";
preg_match_all("/((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/", $page, $result, PREG_PATTERN_ORDER);
print_r($result);
【讨论】:
$host = parse_url($url, PHP_URL_HOST);
$host = array_reverse(explode('.', $host));
$host = $host[1].'.'.$host[0];
【讨论】:
这是你使用 parse_url 时的问题,$url 没有 .com 或 .net 等然后返回的结果是 bannedadsense,这意味着返回 true,事实上 bannedadsense 不是域。
$url = 'http://bannedadsense/isbanned'; // this url will return false in preg_match
//$url = 'http://bannedadsense.com/isbanned'; // this url will return domain in preg_match
$domain = parse_url($url, PHP_URL_HOST));
// return "bannedadsense", meaning this is right domain.
所以我们需要继续检查更多没有点扩展名的案例(.com、.net、.org 等)
if(preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i",$domain)) {
echo $domain;
}else{
echo "<br>";
echo "false";
}
【讨论】: