我试图用“B”一些字符串内,以取代“ 一 ”的所有事件。 问题是,我需要更换只有那些括号内信件:
ASD ASD ASD [ASD ASD ASD] ASD ASD ASD
现在我有这样的代码:
$what = '/(?<=\[)a(?=.*?\])/s';
$with = 'b';
$where = 'asd asd asd [asd asd asd] asd asd asd';
但是,只替换第一个“一”,而我得到这个结果:
ASD ASD ASD [BSD ASD ASD] ASD ASD ASD
我真的只需要一个了preg_replace调用做到了这一点。
你不能用一个做到这一点preg_replace
调用,因为回顾后需要说“有一个左方括号在比赛前的地方 ”,这是不可能的,因为回顾后发模式必须具有固定的长度。
为什么你绝对需要做的这一个电话呢? 它是可行的很容易与preg_replace_callback
,在那里你将匹配的方括号中的内容组,并使用preg_replace
在比赛的每个时间(或只是一个简单的str_replace
,如果你要做的是将“A”和“B”)。
例:
$what = '/\[([^]]*)\]/';
$where = 'asd asd asd [asd asd asd] asd asd asd';
echo preg_replace_callback(
$what,
function($match) {
return '['.str_replace('a', 'b', $match[1]).']';
},
$where);
试试这个(这究竟乔恩解释)
function replace_a_with_b($matches)
{
return str_replace("a", "b", $matches[0]);
}
$text = 'asd asd asd [asd asd asd] asd asd asd';
echo preg_replace_callback("#(\[[^]]+\])#", "replace_a_with_b", $text);
输出:
asd asd asd [bsd bsd bsd] asd asd asd