我如何从str中的url获取它?

时间:2016-08-02 14:10:06

标签: php regex

代码:

$str = '<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>';
echo $str;

输出:

<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>

我需要这个输出(仅适用于href html标签):

y.zip
yz.rar
yz.zip.html
yz.rar.html

我只需要例如.zip.html example.rar.html和example.rar example.zip

我该怎么做?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

所以,我知道你的问题是解析那个特定的字符串。但我发现自己想知道为什么字符串中有几个由换行符分隔。他们来自哪里?

回答你的问题:

$str = 'http://www.x.com/y.html <br /> http://www.c.com/yz.html <br /> http://www.c.com/b/c/yz.txt <br /> http://www.c.com/a/yz.zip <br /> http://www.c.com/a/yz.jpg <br /> http://www.c.com/a/e/yz.rar';
$urls = explode('<br /> ', $str);
foreach($urls as $url) {
  echo basename($url).'<br>';
}

请记住,这并不是解决这个问题的好方法,但考虑到您的要求,这是我能想到的最佳方式。如果您能够以更好的形式接收信息,那么您可以做一些更有意义的事情。

<强>更新

在OP更新问题之后,这是一个更好的答案:

$html = '<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>';

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
    echo basename($node->getAttribute('href')).'<br>';
}

这将分析您的字符串中的标记(我假设您正在从文档或其他内容中解析它?),然后遍历a标记并获取href的基本名称每个人的属性。

修改

根据OP的最后评论,您可能对pathinfo而不是basename更感兴趣,如上所述:

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
    $pathInfo = pathinfo($node->getAttribute('href'));

    $fileExtension = $pathInfo["extension"];
    $fileName = $pathInfo["filename"];
}

您可以阅读有关PHP pathinfo here

的更多信息