Php 预更换更换字符
我对preg_replace函数有问题 如何将字符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(
[
替换为&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在变量周围添加了{}
,解决了这个问题。