gpt4 book ai didi

php - 用正则表达式递归替换匹配标签

转载 作者:搜寻专家 更新时间:2023-10-31 21:44:35 25 4
gpt4 key购买 nike

我有以下字符串:

<?foo?> <?bar?> <?baz?> hello world <?/?> <?/?> <?/?>

我需要一个正则表达式来把它转换成

<?foo?> <?bar?> <?baz?> hello world <?/baz?> <?/bar?> <?/foo?>

以下代码适用于非递归标签:

$x=preg_replace_callback('/.*?<\?\/\?>/',function($x){
return preg_replace('/(.*<\?([^\/][\w]+)\?>)(.*?)(<\?\/?\?>)/s',
'\1\3<?/\2?>',$x[0]);
},$str);

最佳答案

你不能用正则表达式来做到这一点。你需要写一个解析器!

因此创建一个堆栈(一个数组,您可以在其中添加和删除末尾的项目。使用 array_push() array_pop() )。

遍历标签,将已知的开始标签压入堆栈。

当您到达结束标签时,弹出堆栈,它会告诉您需要关闭的标签。

关于php - 用正则表达式递归替换匹配标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986294/

25 4 0