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>パーツも)。それらを消費した後、マッチするものはもうなく、ここで終わり、マッチは1つだけになります.

于 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 に答える