我有以下示例:
<p>skljklf askjas</p>
<li>dsjd sjg</li> <li>skdkgds</li>
<li>skask las</li>
<p>skklgs aklgas</p>
<ul><li>saks </li><li>isksa</li></ul>
<li>asjkafsklj asjlkafs</li>
如您所见,有 li
标签没有被ul
包围。我正在尝试找到一个正则表达式,它可以选择<li>...</li><li>...</li>
的所有出现并用<ul></ul>
包围它们。所以最后我会有以下文字:
<p>skljklf askjas</p>
<ul><li>dsjd sjg</li> <li>skdkgds</li>
<li>skask las</li></ul>
<p>skklgs aklgas</p>
<ul><li>saks </li><li>isksa</li></ul>
<ul><li>asjkafsklj asjlkafs</li></ul>
用 preg_replace
和 mb_ereg_replace
在 php 中尝试它,但还没有真正的线索我可以如何开始。
我不想用DOMDocument
做 DOM 操作.
试试这个:
(?<!<ul>)(?<!<'/li>)((?:'s*'n*<li>[^<]*<'/li>'s*'n*)+)(?<!<li>)(?!<'/ul>)
正则表达式演示
$re = "/(?<!<ul>)(?<!<''/li>)((?:<li>[^<]*<''/li>''s*''n*)+)(?<!<li>)(?!<''/ul>)/";
$str = "<p>skljklf askjas</p>'n<li>dsjd sjg</li> <li>skdkgds</li>'n<li>skask las</li>'n<p>skklgs aklgas</p>'n<ul><li>saks </li><li>isksa</li></ul>'n<li>asjkafsklj asjlkafs</li>";
$str = preg_replace($re, '<ul>$0</ul>', $str);