如何匹配
块<li>item 1</li>
<li>item 2</li>
无论块之前还是之后都有空白行
并使用PHP <ul></ul>
将其封装在preg_*
标记中
功能
感谢您的回答
答案 0 :(得分:2)
如果这是安全的,受控制的输入,并且您刚刚获得缺少父级UL的LI,您可以这样做:
preg_replace ( '#\s*(?:<li>.*</li>\s*)+#' , '<ul>$0</ul>', $input )
(您可能希望在UL之前或之后向替换字符串添加一些\n
。)
注意:如果出现以下情况,则会失败:
.
默认排除换行符。)其中一些可以相对容易地满足,但我不打算 - 如果你还没有知道具体内容,你应该使用real HTML parser代替。
正则表达式中的“常规”具有特定含义,完整HTML 不 a Regular language,因此尝试使用简单正则表达式处理HTML的所有复杂性可能会失败。
如果您在用户提供的HTML上使用了错误的正则表达式,则可能会在代码中引入HTML injection vulnerabilities。
答案 1 :(得分:1)
大卫已经说过,php有xml和html-parsers。但是,如果你真的想使用正则表达式,它可能会像:
preg_match('#<li>(.*?)</li>#', $string);
// Same thing
preg_match('#<li>(.*)</li>#U', $string);