Php 如何根据html标记将字符串拆分为数组

Php 如何根据html标记将字符串拆分为数组,php,preg-replace,Php,Preg Replace,我有一个带有HTML标记的字符串,我想分解成如下所示的数组 我考虑爆炸的标签是:p、h1、h2、h3、h4、h5、, 例如: $data ="<p> Paragraph 1 </p> <h2>h2 tag 1 </h2> <p> Paragraph 2.</p> <p>Paragraph 3 </p> <ol> <li>pizza</li> <li>bu

我有一个带有HTML标记的字符串,我想分解成如下所示的数组

我考虑爆炸的标签是:
p、h1、h2、h3、h4、h5、

例如:

$data ="<p> Paragraph 1 </p> <h2>h2 tag 1 </h2> <p> Paragraph 2.</p> <p>Paragraph 3 </p> <ol> <li>pizza</li> <li>burgers</li> <li>salad</li> </ol> <ul> <li> <ul> <li> One </li> <li>Twp </li> <li>Three</li> </ul> </li> </ul> <p> Paragraph 
 5 </p> <p>Paragraph 6:</p> <h4> h4 tag</h4> <h1> h4 tag</h1> <h4> h4 tag</h4>"
$data=“第1段

第2段

第3段

比萨饼
  • 汉堡
  • 沙拉 第6段:

    h4标签h4标签h4标签”
    我需要以下输出:

    $array_tags= [
     0 => <p> Paragraph 1 </p>,
     1 => <h2>h2 tag 1 </h2>,
     2 => <p> Paragraph 2 </p>,
     3 => <p> Paragraph 3 </p>,
     4 => <ol> <li>pizza</li> <li>burgers</li> <li>salad</li> </ol>,
     5 => <p> Paragraph 4 </p>,
     6 => <ul> <li> <ul> <li> One </li> <li>Twp </li> <li>Three</li> </ul> </li> </ul>,
     7 =>  <p> Paragraph 5 </p>,
     8 =>  <p> Paragraph 6 </p>,
     9 =>  <h4> h4 tag</h4>,
     10 => <h1> h1 tag</h1>,
    ];
    
    $array\u标记=[
    0=>第1段,
    1=>h2标签1,
    2=>第2段,
    第3段,
    4=>
  • 比萨饼
  • 汉堡
  • 沙拉
  • , 5=>第4段, 6=>
      • 一个
      • Twp
      • 三个
      • , 7=>第5段, 8=>第6段, 9=>h4标签, 10=>h1标签, ];

    有人能帮忙吗?提前谢谢

    应该使用将字符串拆分为数组

    $data ="<p> Paragraph 1 </p> <h2>h2 tag 1 </h2> <p> Paragraph 2.</p> <p>Paragraph 3 </p> <ol> <li>pizza</li> <li>burgers</li> <li>salad</li> </ol> <ul> <li> <ul> <li> One </li> <li>Twp </li> <li>Three</li> </ul> </li> </ul> <p> Paragraph 
     5 </p> <p>Paragraph 6:</p> <h4> h4 tag</h4> <h1> h4 tag</h1> <h4> h4 tag</h4>";
    
        preg_match_all('/<p>(.*?)<\/p>|<h1>(.*?)<\/h1>|<h2>(.*?)<\/h2>|<h3>(.*?)<\/h3>|<h4>(.*?)<\/h4>|<h5>(.*?)<\/h5>|<ul>(.*)<\/ul>|<ol>(.*?)<\/ol>/', $data, $matches);
        dd($matches[0]);
    
    $data=“第1段

    第2段

    第3段

    比萨饼
  • 汉堡
  • 沙拉 5

    第6段:

    h4标签h4标签; preg|u match|u all('/(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)/”,$data,$matches); dd($matches[0]);
    输出
    数组:10[▼
    0=>“第1段”
    1=>“h2标记1”
    2=>“第2段。

    ” 3=>“第3段” 4=>“
  • 比萨饼
  • 汉堡
  • 沙拉
  • ” 5=>“
      • 一个
      • 三个
      ” 6=>“第6段:

      ” 7=>“h4标签” 8=>“h4标签” 9=>“h4标签” ]
    您试过了吗?一切都好吗?除了标签外,一切看起来都很好。它应该返回
    • 一个Twp
    • 三个
        • ,但最后一个
            丢失。这里有任何建议吗?我更新了代码,请再试一次,用
              (*)替换
                (*)谢谢!它正在按预期工作!
                  array:10 [▼
                  0 => "<p> Paragraph 1 </p>"
                  1 => "<h2>h2 tag 1 </h2>"
                  2 => "<p> Paragraph 2.</p>"
                  3 => "<p>Paragraph 3 </p>"
                  4 => "<ol> <li>pizza</li> <li>burgers</li> <li>salad</li> </ol>"
                  5 => "<ul> <li> <ul> <li> One </li> <li>Twp </li> <li>Three</li> </ul> </li> </ul>"
                  6 => "<p>Paragraph 6:</p>"
                  7 => "<h4> h4 tag</h4>"
                  8 => "<h1> h4 tag</h1>"
                  9 => "<h4> h4 tag</h4>"
                ]