如何使用preg_replace每次迭代替换一个重复的子字符串?

时间:2017-07-31 08:10:25

标签: php loops preg-replace

我有一个这样的字符串:

$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 ##相同。 我有可能更换两个支架会有不同的值吗?

1 个答案:

答案 0 :(得分:0)

您的问题在细节上有点模糊,但我认为这是您正在寻找的一般方法:

代码:(Demo

$string="I am a [[boy]], he is a[[boy]] too.";
$swaps=['Blank1','Blank2'];
echo "$string\n";
foreach($swaps as $swap){
    $string=preg_replace('/\[{2}[^]]+\]{2}/',$swap,$string,1);
    echo "$string\n";
}

输出:

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()的第四个参数,而不是变量。