我有以下示例:
<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操作。
答案 0 :(得分:1)
试试这个:
(?<!<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);