-2

我将如何使用 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、正则表达式或什么?

可以对此进行修改以实现此目的吗?这里的代码获取前五个,但我想获取最后五个。

$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();
4

2 回答 2

2

一个不太聪明的方法是计算所有打开div标签。假设你得到 n。现在找到第 n-5 个div标签,然后从那里找到第 5 个结束div标签。介于两者之间的一切都是您要寻找的。

div可以这样获得开始标签的数量:

$num_div_tags = count(explode('<div', strtolower($string))) - 1;

从那里开始,找出倒数第五个div标签应该相当简单。

这个解决方案的优雅与 PHP 的优雅完美契合。


如果您对这个解决方案不满意,您不妨想出一个简单的有限状态机,它逐个字符地遍历字符串,检测开始和结束div标签,将每一对保存在长度为 5 的循环列表中并打印到达字符串末尾后的所有列表元素。

于 2013-01-30T21:26:08.993 回答
0

用 xpath 怎么样?

$xpath = new DOMXPath($dom);
foreach($xpath->query('//div[position()>last()-5]') as $div){
  echo $dom->saveHTML($div);
}
于 2013-01-31T02:18:37.413 回答