<li>元素的preg_match_all </li>

时间:2013-09-16 15:50:51

标签: php html regex preg-match-all

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

<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是bad,但我现在几乎没有选择。

2 个答案:

答案 0 :(得分:4)

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

我指出的部分消耗所有字符,直到</ul>(甚至是<li>部分)。消费后,没有更多的匹配,它在这里结束,只给出一个匹配。

答案 1 :(得分: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);
?>