登录
首页 >  文章 >  php教程

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

时间:2024-10-29 19:01:04 261浏览 收藏

文章小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何获取字符串中嵌套标签的完整内容?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


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

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

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

$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);

今天关于《如何获取字符串中嵌套标签的完整内容?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>