我想知道如何从网址中提取域名
我在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
和youtube.com
之间的<a> and </a>
标记。
那么如何提取google.com
和youtube.com
?
答案 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>
这是有效的