我有一个CMS系统,允许人们也使用HTML代码,但在函数末尾提供nl2br
,这使得:
<ul>
<li></li>
</ul>
进入这个:
<ul><br/>
<li></li><br/>
</ul>
现在,我想删除<br/>
个代码之间存在的<ul>
个。{/ p>
我已经找到了另一个问题几乎相同的问题,但对于新行。我已将其集成到我的CMS中,但对于一个客户端,所有内容都已填写,因此我必须在用\n
替换<br/>
之后解决此问题。
other question将此作为正则表达式与\n
中的<ul></ul>
匹配:
/(?<=<ul>|<\/li>)\s*?(?=<\/ul>|<li>)/is
我想是这样的:
/(?<=<ul>|<\/li>)(<br>|<br\/>|<br \/>)(?=<\/ul>|<li>)/is
会做的伎俩,但事实并非如此。我错过了什么?
修改
我对DOMDocument解决方案非常开放,如果有办法用xpath查询换行符,这可能会解决我的问题。
答案 0 :(得分:2)
在您提供的示例中,<br>
标记被一些空格包围(至少由新行字符包围),因此需要将其反映在相应的正则表达式中。
/(?<=<ul>|<\/li>)(\s*<br>\s*|\s*<br\/>\s*|\s*<br \/>\s*)(?=<\/ul>|<li>)/is
在许多情况下,正则表达式不是解析HTML的最佳方式(我绝对同意上面/下面的注释),但它们总是足够用于某些特定目的。
答案 1 :(得分:0)
有很多关于SO的例子说明为什么用正则表达式解析HTML是一个坏主意,所以我不会在这里包含另一个。
相反,请考虑使用HTML解析器(例如HTMLCleaner或HTML Agility Pack)来完成此任务。