0

我想知道如何从 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.com and 。那么我该如何提取和?youtube.com<a> and </a>
google.comyoutube.com

4

2 回答 2

0

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

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

这行得通

于 2012-04-23T01:56:06.110 回答
0

如果您乐于匹配链接文本,则此正则表达式有效。

>(.*?)</a>

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

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

如果您可以轻松访问 URL,请检查 PHP 的parse_url函数。


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

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

更新2。空白是问题所在。我无法做一个优雅的解决方案,但这个解决方案负责<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);
于 2012-04-21T13:19:51.757 回答