Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式匹配未被标记包围的标记_Php_Regex - Fatal编程技术网

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
  • \n
  • skask las
  • \nskklgs aklgas

    \n
  • saks
  • isksa\n
  • ASJKASKLJ 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);