Php 预更换更换字符

Php 预更换更换字符,php,preg-replace,Php,Preg Replace,我对preg_replace函数有问题 如何将字符[替换为&1;和]替换为&2 第一个标签是[cd],最后一个标签是[/cd] 输入: [cd]H[o]m[/cd] 输出: [cd]H&1;o&2;[/cd] 我试过: preg_replace('#\[cd\]([\s\S]*?)\[\/cd\]#i', '[cd]\1[/cd]', '[cd]H[o]m[/cd]'); 提前感谢您的帮助 如果要更改捕获的字符串,可以使用preg\u replace\u callback(

我对preg_replace函数有问题

如何将字符
[
替换为
&1;
]
替换为
&2

第一个标签是
[cd]
,最后一个标签是
[/cd]

输入:

[cd]H[o]m[/cd]
输出:

[cd]H&1;o&2;[/cd]
我试过:

preg_replace('#\[cd\]([\s\S]*?)\[\/cd\]#i', '[cd]\1[/cd]', '[cd]H[o]m[/cd]');

提前感谢您的帮助

如果要更改捕获的字符串,可以使用
preg\u replace\u callback()
。这将调用函数,而不是使用简单字符串作为替换

$string = preg_replace_callback('#\[cd\]([\s\S]*?)\[/cd\]#i', function($matches) {
    $str = str_replace(array('[', ']'), array('&1', '&2'), $matches[1]);
    return "[cd]{$str}[/cd]";
}, '[cd]H[o]m[/cd]');

顺便说一句,如果使用不同的字符作为分隔符,则不需要在regexp中转义
/
——这就是使用
作为分隔符的原因。

如果要更改捕获的字符串,可以使用
preg\u replace\u callback()
。这将调用函数,而不是使用简单字符串作为替换

$string = preg_replace_callback('#\[cd\]([\s\S]*?)\[/cd\]#i', function($matches) {
    $str = str_replace(array('[', ']'), array('&1', '&2'), $matches[1]);
    return "[cd]{$str}[/cd]";
}, '[cd]H[o]m[/cd]');

顺便说一句,如果您使用不同的字符作为分隔符,则不需要在regexp中转义
/
——这就是您使用
#
作为分隔符的原因。

如果您没有显示您已经尝试过的内容(即使它是错误的),您的问题将被视为离题或过于宽泛。将您的尝试添加到问题中。Okej,谢谢您提供的信息,我添加了。字符串是否可以包含多个组,如
[o]
?例如,[cd]H[o]m[i]jsd[/cd]是的,我想让所有字符都从[cd]中交换出来,如果
[cd]
标签被嵌套,该怎么办:
[cd]H[o]m[cd]P[o]m[/cd]jk[/cd]
?如果你没有显示你已经尝试过的内容(即使它是错误的),你的问题将被关闭,因为主题不明确或范围太广。将您的尝试添加到问题中。Okej,谢谢您提供的信息,我添加了。字符串是否可以包含多个组,如
[o]
?例如,[cd]H[o]m[i]jsd[/cd]是的,我想让所有字符都从[cd]中交换出来,如果
[cd]
标记嵌套在一起会怎么样:
[cd]H[o]m[cd]P[o]m[/cd]jk[/cd]
?@splash58谢谢。它正在将
[/cd]
解析为下标。@splash58-错误,因为“”无效,请使用:返回“[cd]”。$str.[/cd]”@Xeer在变量周围添加了
{}
,解决了这个问题。@谢谢。它正在将
[/cd]
解析为下标。@splash58-错误,因为“”无效,请使用:返回“[cd]”。$str.[/cd]”@Xeer在变量周围添加了
{}
,解决了这个问题。