2012-06-21 113 views
0

我有一个以无序列表开头的内容字符串我想在我的主页上对此内容进行总结,我需要匹配第一个无序列表,并且只显示预览中的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中的其他方法?

并提前致谢。

+2

将内部'/'转义为'\ s * \/\ s',但实际上您应该使用适当的HTML解析库。它将你的'/ \ s'解释为正则表达式的结尾,它不能将'\ s'解释为一个已知的修饰符。 –

+1

或者,你可以用'〜pattern〜'等不同的字符来划分整个事物,所以你不必去掉斜线。 –

+0

你应该接受答案。 – Tareq

回答

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>秒。不过,你将无法单独访问它们。您可以展开该重复组,也可以运行第二个表达式以提取<li>

相关问题