求正则如何把html嵌套标签和文字分组为数组

dnpao 2016-11-22 03:55:26
$str='
<p>
<font>11111</font>
2222222
<font>3333</font>
44444
<span>555555</span><b>66666</b>
</p>
';


————————————————
以下数组为想得到的结果

$arr=array(
[0] => <font>11111</font>
[1] => 2222222
[2] => <font>3333</font>
[3] => 44444
[4] => <span>555555</span>
[5] => <b>66666</b>
)
...全文
366 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉青 2019-07-12
  • 打赏
  • 举报
回复
楼上厉害了!
傲雪星枫 2016-11-22
  • 打赏
  • 举报
回复
不需要用正则,这样就可以了

$s =<<<TXT
<p>
<font>11111</font>
2222222
<font>3333</font>
44444
<span>555555</span><b>66666</b>
</p>
TXT;

$s = str_replace('><',">\n<", $s);
$data = explode("\n", $s);
unset($data[count($data)-1], $data[0]);
print_r($data);


Array
(
    [1] => <font>11111</font>
    [2] => 2222222
    [3] => <font>3333</font>
    [4] => 44444
    [5] => <span>555555</span>
    [6] => <b>66666</b>
)

xuzuning 2016-11-22
  • 打赏
  • 举报
回复
基础的,供参考
$s =<<< TXT
<font>11111</font>
2222222
<font>3333</font>
44444
<span>555555</span><b>66666</b>
TXT;
$p = "/<([a-z]+)[^>]*>([^<>]|(?R))*<\/\\1>/is";

preg_match_all($p,$s,$m);

print_r($m[0]);
Array
(
    [0] => <font>11111</font>
    [1] => <font>3333</font>
    [2] => <span>555555</span>
    [3] => <b>66666</b>
)

正则不是万能的,类似这样的工作,不是正则能胜任的

21,894

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧