首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则问题-如果我知道如何正确地提问,我也会正确地知道答案?

正则问题-如果我知道如何正确地提问,我也会正确地知道答案?
EN

Stack Overflow用户
提问于 2011-03-04 10:48:40
回答 1查看 75关注 0票数 2

因此,基本上我的正则表达式没有像我期望的那样工作&我不知道为什么。

我在一个相当规范的环境中工作,所以这应该不是太大的问题-所有的html标签都是由脚本生成的&遵循这个模式:只有liph(3-6)标签存在。所有文本都在标签之间,标签之间没有空格。

我“需要”写一些东西来用ul标签包围li。下面是我得到的信息:

代码语言:javascript
复制
preg_replace('#(<li>[^<p|<h]+</li>)(?!<li>)#', '<ul>$1</ul>', $html)

但是,由于某些原因,它只匹配集合中的最后一个li对。谁都能告诉我为什么..。请?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-04 10:55:09

[^<p|<h]不会做您期望的事情。它匹配的单个字符不是任何字符<p|h。如果您的超文本标记语言确实如您所说的那样受约束,并且您不能将一个<li>嵌套在另一个<li>中,那么下面的方法应该是可行的:

代码语言:javascript
复制
preg_replace('#(<li>.*?</li>)+#', '<ul>$0</ul>', $html)

序列.*?.*类似,只是尾部的?是非贪婪修饰符。默认情况下,.*是贪婪的-它将尽可能多地使用字符,然后在模式的其余部分不匹配时回溯。非贪婪修饰符颠倒了这一点。它使用尽可能少的字符,并在模式的其余部分无法匹配时前进。因为模式的其余部分只是简单的</li>,所以这有效地捕获了直到(但不包括)第一个序列</li>的所有文本。然后将此模式嵌套在捕获中,然后使用+重复捕获,这意味着它将匹配一个或多个<li>标记序列。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5189118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档