如何匹配字符串中的第一个无序列表并选择第一个列表项?

时间:2012-06-21 16:04:07

标签: html regex preg-match

我有一个以无序列表开头的内容字符串我想在我的主页上对此内容进行总结,我需要匹配第一个无序列表,并且只在预览中显示5个列表项,所以我说明了匹配使用此正则表达式的整个ul标记:

/<\s*ul[^>]*>(.*?)<\s*/\s*ul>/s

它在网上正则表达式测试工作正常,但我得到了未知的修饰符'\',我不知道哪一个?获取整个无序列表后,如何仅选择前5个列表项,例如:

<ul class="mylist">
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
    <li>Lorem Ipsum Dolor Sit Amet</li>
</ul>

我想创建只有前5个<li>标签的同一个,所以我应该在php中使用正则表达式还是其他一些方法?

并提前致谢。

1 个答案:

答案 0 :(得分:2)

/<\s*ul[^>]*>(.*?)<\s*/\s*ul>/s

如果您将其用作分隔符,则需要转义/

/<\s*ul[^>]*>(.*?)<\s*\/\s*ul>/s

在PHP中,您可以使用任何字符作为分隔符:

#<\s*ul[^>]*>(.*?)<\s*/\s*ul>#s

您可以重复一种模式:

#<\s*ul[^>]*>(\s*<li>.+?</li>){5}#sm

将匹配5 <li> s。但是,你无法单独访问它们。您可以展开该重复组,也可以运行第二个表达式来提取<li>