如何获取字符串中嵌套标签的完整内容?

如何获取字符串中嵌套标签的完整内容?

获取字符串指定标签含嵌套标签的内容

如何获取类似以下字符串中的最外层所有 标签及其包含的内容?

$str = "{if 'a'}    111111    {if 'c'}33333{/if}    {if 'd'}44444{/if}    ......{/if}{if 'b'}22222{/if}";

期望得到:

["{if 'a'}    111111    {if 'c'}33333{/if}    {if 'd'}44444{/if}    ......{/if}","{if 'b'}22222{/if}"]

虽然可以使用正则获取标签内容,但由于嵌套的存在,需要更复杂的处理。

代码实现:

$stack = [];$top = null;$result = [];preg_match_all('!({/?if)!', $str, $matches, PREG_OFFSET_CAPTURE);foreach ($matches[0] as [$match, $offset]) {    if ($match === '{if') {        $stack[] = $offset;        if ($top === null) { $top = $offset; }    } else {        $pop = array_pop($stack);        if ($pop === null) { throw new Exception('语法错误,存在多余的 {/if} 标签'); }        if (empty($stack)) {            $newOffset = $offset + strlen($match);            $result[] = substr($str, $top, $newOffset);            $top = $newOffset + 1;        }    }}if (!empty($stack)) { throw new Exception('语法错误,存在未闭合的 {if} 标签'); }var_dump($result);

以上就是如何获取字符串中嵌套标签的完整内容?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1248786.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
## 使用 pcntl_async_signals 和 pcntl_wait 时,为什么 SIGTERM 信号回调函数没有被调用?
上一篇 2025年12月9日 20:47:57
##  PHP Workerman 使用 Predis 连接 Redis 时,如何解决通信中断问题?
下一篇 2025年12月9日 20:48:06

相关推荐

发表回复

登录后才能评论
关注微信