3

我正在尝试返回列表的计数。该列表如下所示:

<div id="list">
    <ul>
        <li class="some classes">1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</div>

我只是不知道如何计算li标签。我不关心内容,只关心计数。这就是我所拥有的:

preg_match_all('!<div id="list">.*?<li.*?>.*?</li>.*?</ul>!', $content, $matches);

丑我知道,我只收到一场比赛当我count($matches[0]);

谁能指出我做错了什么和/或为什么?

谢谢

编辑:我知道用正则表达式解析 HTML 是不好的,但我现在在这件事上别无选择。

4

2 回答 2

4
<div id="list">.*?<li.*?>.*?</li>.*?</ul>
                                 ^^^

我要指出的部分是消耗所有字符,直到</ul>(甚至是<li>部分)。吃完它们之后,就没有更多的匹配了,它到此结束,只给出一个匹配。

于 2013-09-16T15:53:31.593 回答
1

试试这个,它应该适用于几乎所有情况:

<?php
$t='<div id="list">
    <ul>
        <li class="some classes">1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</div>';

$list_array=explode("</li>",$t);
echo "total in list = ".count($list_array);
?>
于 2013-09-16T16:06:37.023 回答