Php 正则表达式匹配未被标记包围的标记
我举了以下例子:Php 正则表达式匹配未被标记包围的标记,php,regex,Php,Regex,我举了以下例子: <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>
<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>
在php中尝试使用preg_replace
和mb_ereg_replace
,但还没有真正的线索知道如何开始
我不想使用DOMDocument
执行DOM操作,请尝试以下操作:
(?<!<ul>)(?<!<\/li>)((?:\s*\n*<li>[^<]*<\/li>\s*\n*)+)(?<!<li>)(?!<\/ul>)
(?)(?)((?:\s*\n*[^)
$re=“/(?)(?)((?:[^)/”;
$str=“skljklf askjas\n dsjd sjg skdkgds \nskask las \nskklgs aklgas\nsaks isksa\nASJKASKLJ asjlkafs ”;
$str=preg_replace($re,“$0
”,$str);
相关?@starkeen tim007已经找到了一个使用regex的解决方案regex对于这项工作来说是错误的工具,使用regex解析HTML只会推迟和放大你的痛苦。@zzzzBov我知道。但我需要这个临时的快速解决方案。遗憾的是,它太符合一件事了:“- asd
- aasdfgh
- ”:/
(?<!<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);