如何使用简单的 html dom 获得 link
How to get link using simple html dom
Html文档是这样的
<li><h2><a href="http://beezfeed.cu.ma">Beezfeed</h2></a></li>
<li><a href="http://beezfeed.cu.ma/kuto">Beezfeed kuto</a></li>
<li><a href="http://beezfeed.cu.ma/movies">Beezfeed movies</a></li>
这里我想要最后两个 link href。这是我使用简单 html dom 的代码,所以请回答我这个问题,你能不能也用正则表达式告诉我。
$bb->load($str);
$link = $bb->find('div[class=azindex] li');
foreach ($link as $s) {
$lin = $s->find("a");
foreach ($lin as $li) {
echo $li->href . "<br/>";
}
}
我得到了 li 标签中包含的所有 link,但我不想要具有 h2 标签的 link。提前致谢
如果我必须以一种简单的方式来做,我会这样做:
$bb->load($str);
$link=$bb->find('div[class=azindex] li');
foreach($link as $s){
$lin=$s->find("a");
foreach($lin as $li){
if(is_null($li->find("h2")) {
echo $li->href."<br>";
}
/*Do nothing if h2 was found*/
}
}
我只是在 $li 上使用了 find 方法,如果找到 h2 我什么都不做,否则我打印该行。
我无法测试它,我希望它能有所帮助。
匹配正确链接的正则表达式:
$items = '
<li><h2><a href="http://beezfeed1.cu.ma">Beezfeed1</h2></a></li>
<li><p><a href="http://beezfeed2.cu.ma/">Beezfeed2</a></p></li>
<li><h4><a href="http://beezfeed3.cu.ma">Beezfeed3</h4></a></li>
<li><a href="http://beezfeed4.cu.ma/">Beezfeed4</a></li>
';
preg_match_all('(<li>(?!<h[1-9]>).*<a href="(.*)")',$items,$matches);
这匹配:
http//beezfeed2.cu.ma/ 和 http//beezfeed4.cu.ma/
这将匹配所有 h1 到 h9 标签。
更严格的匹配:
preg_match_all('(<li>\s?<a href="(.*)")',$items,$matches);
仅此 returns:
http//beezfeed4.cu.ma
此正则表达式不允许
和 之间的任何字符,除了 spaces(\s? 是可选的 space)。
Html文档是这样的
<li><h2><a href="http://beezfeed.cu.ma">Beezfeed</h2></a></li>
<li><a href="http://beezfeed.cu.ma/kuto">Beezfeed kuto</a></li>
<li><a href="http://beezfeed.cu.ma/movies">Beezfeed movies</a></li>
这里我想要最后两个 link href。这是我使用简单 html dom 的代码,所以请回答我这个问题,你能不能也用正则表达式告诉我。
$bb->load($str);
$link = $bb->find('div[class=azindex] li');
foreach ($link as $s) {
$lin = $s->find("a");
foreach ($lin as $li) {
echo $li->href . "<br/>";
}
}
我得到了 li 标签中包含的所有 link,但我不想要具有 h2 标签的 link。提前致谢
如果我必须以一种简单的方式来做,我会这样做:
$bb->load($str);
$link=$bb->find('div[class=azindex] li');
foreach($link as $s){
$lin=$s->find("a");
foreach($lin as $li){
if(is_null($li->find("h2")) {
echo $li->href."<br>";
}
/*Do nothing if h2 was found*/
}
}
我只是在 $li 上使用了 find 方法,如果找到 h2 我什么都不做,否则我打印该行。 我无法测试它,我希望它能有所帮助。
匹配正确链接的正则表达式:
$items = '
<li><h2><a href="http://beezfeed1.cu.ma">Beezfeed1</h2></a></li>
<li><p><a href="http://beezfeed2.cu.ma/">Beezfeed2</a></p></li>
<li><h4><a href="http://beezfeed3.cu.ma">Beezfeed3</h4></a></li>
<li><a href="http://beezfeed4.cu.ma/">Beezfeed4</a></li>
';
preg_match_all('(<li>(?!<h[1-9]>).*<a href="(.*)")',$items,$matches);
这匹配: http//beezfeed2.cu.ma/ 和 http//beezfeed4.cu.ma/
这将匹配所有 h1 到 h9 标签。
更严格的匹配:
preg_match_all('(<li>\s?<a href="(.*)")',$items,$matches);
仅此 returns:
http//beezfeed4.cu.ma
此正则表达式不允许