我有以下字符串:
<?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);