【问题标题】:preg_match_all for <li> elements<li> 元素的 preg_match_all
【发布时间】:2013-09-20 20:26:31
【问题描述】:

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

<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,但我现在在这件事上别无选择。

【问题讨论】:

  • 强制性:stackoverflow.com/a/1732454/722762to͇̹̺ɲ̴ȳ̳th̘ë͖̉p̯͍̭o̚n̐y̡h̸̡̪̯ͨ͊̽̅̾ȩ̸̡̬̩̪̯̾͛ͪ̈ͨ͊̽̅̾͘ȩ̬̩̾͛ͪ̈͘c̷̙̝͖ͭ̏ͥͮ͟oͮ͏̮̪̝͍m̖͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞ͩ͌͝sə span>
  • 哦,是的,我忘了说我现在别无选择......但感谢您的关注:P

标签: php html regex preg-match-all


【解决方案1】:
<div id="list">.*?<li.*?>.*?</li>.*?</ul>
                                 ^^^

我要指出的部分是消耗所有字符,直到&lt;/ul&gt;(甚至是&lt;li&gt; 部分)。吃完之后,没有更多可以匹配的了,到这里就结束了,只给了一个匹配。

【讨论】:

  • 如果你想找到一个解决方案,你可以使用正则表达式here,它计算一组&lt;ul&gt;中的所有&lt;li&gt;
【解决方案2】:

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

<?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);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多