如何使用PHP从URL中提取域名

时间:2012-04-21 13:04:36

标签: php html url

我想知道如何从网址中提取域名

我在HTML文件中有数据:

<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br />

我可以通过

获得完整的超链接
 preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+".
                    "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/",
                    $var, &$matches);

    $matches = $matches[1];
    $list = array();
sort($matches);

但我想提取google.comyoutube.com之间的<a> and </a>标记。
那么如何提取google.comyoutube.com

2 个答案:

答案 0 :(得分:0)

如果您很乐意匹配链接文本,则此正则表达式可以正常运行。

>(.*?)</a>

如果要解析实际的URL,可以尝试忽略一些接受的字符串之后的所有内容,例如“com”,“net”和“org”。这可能会变得非常棘手。您想要匹配主机名还是什么?

至于您的示例“youtube.com.site.com”,请参阅:http://en.wikipedia.org/wiki/Domain_name#Domain_name_syntax

如果您可以轻松访问该网址,请查看PHP的parse_url功能。


更新。这是在href=之后匹配单引号或双引号的匹配的正则表达式。在此之后,应该很容易使用parse_url()

<a href=['|"](.*?)?['|"]>

UPDATE2。空白是问题所在。我无法做出优雅的解决方案,但是这个解决了<br /> s。我很确定有更高效的解决方案。如果我找到一个,我会回来的。

$s = '<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br /><a href='http://youtube.com.site.com'>extratube.com</a>';

$pattern = '#>(.*?)</a>(<br />)*#';
preg_match_all($pattern, $s, $result);
var_dump($result);

答案 1 :(得分:0)

我在经历了很多麻烦之后写了我自己的正则表达式

<a[^>]*>(.*?)<\/a>

这是有效的