
获取字符串指定标签含嵌套标签的内容
如何获取类似以下字符串中的最外层所有 <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);以上就是如何获取字符串中嵌套标签的完整内容?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号