回声最后五个div

时间:2013-01-30 21:21:32

标签: php regex domparser

我如何使用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();

2 个答案:

答案 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);
}