我有一个这样的字符串:
$replace = "I am a [[boy]], he is a[[boy]] too."
我想做的是将第一个[[boy]]
替换为单词"Blank1",将第二个[[boy]]
替换为"Blank2"。
我尝试过的:
for($i=1;$i<=count($questions[$qn_count]['correct_ans']);$i++){
$word = "##BLK".$i."##";
$pattern_bracket = "/[[([^]]+)]]/";
$ff = preg_replace($pattern_bracket,$word , $replace, $i);
}
$questions[$qn_count]['body'] = $ff;
上述[[ ]]
将始终显示为##BLK2##的相同替换。 我可以替换两个括号会有不同的价值吗?
你的问题在细节上有点模糊,但我认为这是你正在寻找的一般方法:
代码:(演示(
$string="I am a [[boy]], he is a[[boy]] too.";
$swaps=['Blank1','Blank2'];
echo "$stringn";
foreach($swaps as $swap){
$string=preg_replace('/[{2}[^]]+]{2}/',$swap,$string,1);
echo "$stringn";
}
输出:
I am a [[boy]], he is a[[boy]] too.
I am a Blank1, he is a[[boy]] too.
I am a Blank1, he is aBlank2 too.
只是几个注意事项:
- 您不需要转义否定字符类中的方括号。
- 使用大括号限定符
{2}
将比重复字符等效项更有效地执行。 - 由于您一次只想替换一个参数,因此请使用
1
作为preg_replace()
的第四个参数而不是变量。