基本上我正在尝试使用preg_match查找带有PDF附件的所有链接,然后将整个url添加到数组中。我正在努力的部分是如何在比赛前选择所有内容,直到<a href="">
的“引号”。我想这样做,这样我就可以循环遍历数组,并为每个文档做我需要的任何事情。我只想在数组中以'1234.pdf'
(加上任何子目录信息)结束。
有什么想法吗?
这是我到目前为止,它只返回匹配...
$string1 = "<a href='1234.pdf'>Document 1</a>";
$match = preg_match("/.pdf/i", $string1, $output);
由于
答案 0 :(得分:5)
您应该使用DOM解析器来提取该信息,因为它更容易,而且更安全。然后,您可以使用preg_match
检查链接是否实际上是PDF:
$html = '<a href="foo.pdf">Foo</a>'.
'<a href="bar.jpg">Bar</a>'.
'<a href="baz.pdf">Baz</a>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$result = array();
foreach ($links as $link) {
$href = $link->getAttribute('href');
if (preg_match('/\.pdf$/i', $href)) $result[] = $href;
}
print_r($result);
输出:
Array
(
[0] => foo.pdf
[1] => baz.pdf
)
答案 1 :(得分:1)
您应该使用正确的HTML解析器(请参阅netcoder的答案)并应用XPath表达式来解决此问题。如果您受到约束并决定使用正则表达式,请尝试以下方法:
$match = preg_match_all("/(?<=href=['\"])([^'\"]*\\.pdf[^'\"]*)(?=['\"])/",
$string1, $output);
答案 2 :(得分:0)
如果我理解正确,听起来你需要使用子模式。尝试这样的事情......
$match = preg_match("/href=\"(.*\.pdf)\"/i", $string1, $output);
$ output变量应该是一个数组,索引0包含全文匹配,索引1包含从括号之间匹配的文本。