我如何使用php来echo
最后5个div?
例如,这个字符串:
<div style='df">cool</div><div>cooletre</div><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div>
我该怎么做?有一个domparser,正则表达式还是什么?
可以修改它来实现这个目标吗?这里的代码获取前五个,但我想获取 last 五个。
$string = '<div class="div">1</div><div class="div">2</div><div class="div">3</div><div class="div">4</div><div class="div">5</div><div class="div">end!</div>';
$dom = new DOMDocument();
$new_dom = new DOMDocument;
$dom->loadHTML($string);
$count = 0;
foreach ($dom->getElementsByTagName('div') as $node)
{
$new_dom->appendChild($new_dom->importNode($node, TRUE));
if (++$count >= 5)
break;
}
echo $new_dom->saveHTML();
答案 0 :(得分:2)
一种不那么聪明的方法是计算所有打开的div
标签。说你得到了。现在找到n-5th div
标记,然后从中找到第5个结束div
标记。介于两者之间的是你正在寻找的东西。
可以像这样获得开放div
标签的数量:
$num_div_tags = count(explode('<div', strtolower($string))) - 1;
从那里开始,弄清楚最后一个div
标签应该相当简单。
这种解决方案的优雅完美契合了PHP的优雅。
如果您对此解决方案不满意,您可能会想出一个简单的有限状态机,它通过char迭代字符串char,检测打开和关闭div
标记,将每对保存在循环列表中长度为5并在到达字符串末尾时打印所有列表元素。
答案 1 :(得分:0)
使用xpath怎么样?
$xpath = new DOMXPath($dom);
foreach($xpath->query('//div[position()>last()-5]') as $div){
echo $dom->saveHTML($div);
}