如何解决使用正则表达式从HTML文档中的链接中提取URL
|| 我需要捕获给定html中的所有链接。 这是示例代码:<div class=\"infobar\">
... some code goes here ...
<a href=\"/link/some-text\">link 1</a>
<a href=\"/link/another-text\">link 2</a>
<a href=\"/link/blabla\">link 3</a>
<a href=\"/link/whassup\">link 4</a>
... some code goes here ...
</div>
我需要在div.infobar
内以/link/
开头的所有链接
我尝试了这个:
preg_match_all(\'#<div class=\"infobar\">.*?(href=\"/link/(.*?)\") .*?</div>#is\',$raw,$x);
但这给了我唯一的第一场比赛。
感谢您的建议。
解决方法
我建议为此目的使用DOMDocument而不是使用正则表达式。考虑以下简单代码:
$content = \'
<div class=\"infobar\">
<a href=\"/link/some-text\">link 1</a>
<a href=\"/link/another-text\">link 2</a>
<a href=\"/link/blabla\">link 3</a>
<a href=\"/link/whassup\">link 4</a>
</div>\';
$dom = new DOMDocument();
$dom->loadHTML($content);
// To hold all your links...
$links = array();
// Get all divs
$divs = $dom->getElementsByTagName(\"div\");
foreach($divs as $div) {
// Check the class attr of each div
$cl = $div->getAttribute(\"class\");
if ($cl == \"infobar\") {
// Find all hrefs and append it to our $links array
$hrefs = $div->getElementsByTagName(\"a\");
foreach ($hrefs as $href)
$links[] = $href->getAttribute(\"href\");
}
}
var_dump($links);
输出值
array(4) {
[0]=>
string(15) \"/link/some-text\"
[1]=>
string(18) \"/link/another-text\"
[2]=>
string(12) \"/link/blabla\"
[3]=>
string(13) \"/link/whassup\"
}
, 修改我以前的答案。您需要分两个步骤进行操作:
//This first step grabs the contents of the div.
preg_match(\'#(?<=<div class=\"infobar\">).*?(?=</div>)#is\',$raw,$x);
//And here,we grab all of the links.
preg_match_all(\'#href=\"/link/(.*?)\"#is\',$x[0],$x);
, http://simplehtmldom.sourceforge.net/:
// Create DOM from URL or file
$html = file_get_html(\'http://www.google.com/\');
// Find all links
foreach($html->find(\'a\') as $element)
echo $element->href . \'<br>\';
, 试试这个(我加了+
):
preg_match_all(\'#<div class=\"infobar\">.*?(href=\"/link/(?:.*?)\")+ .*?</div>#is\',$x);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。