Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用preg_replace在每次迭代中替换一个重复的子字符串?_Php_Loops_Preg Replace - Fatal编程技术网

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

Php 如何使用preg_replace在每次迭代中替换一个重复的子字符串?,php,loops,preg-replace,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_

我有这样一个字符串:

$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;

for($i=1;$i您的问题在细节上有点模糊,但我认为这是您正在寻找的一般方法:

代码:()

输出:

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.
请注意:

  • 您不需要在否定字符类中转义方括号
  • 使用带花括号的quanitifier
    {2}
    将比重复的等效字符执行效率更高
  • 由于一次只需要替换一个,请使用
    1
    作为
    preg\u replace()
    的第四个参数,而不是变量

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

      代码:()

      输出:

      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.
      
      请注意:

      • 您不需要在否定字符类中转义方括号
      • 使用带花括号的quanitifier
        {2}
        将比重复的等效字符执行效率更高
      • 由于一次只需要替换一个,请使用
        1
        作为
        preg\u replace()
        的第四个参数,而不是变量

      如果是静态单词,为什么要用正则表达式呢?我认为是一样的,因为[[boy]]也会出现两次。如果是@Andreas提到的静态单词,简单的str_替换就足够了。如果不是,你能添加$pattern_括号变量中的内容吗?如果我放入$ff=preg_replace([[boy]]”,$word,$replace,$I);这两个结果也将被$word=“###################################################也会出现两次。如果只是@Andreas提到的静态单词,一个简单的str_替换就足够了。如果不是,您可以添加$pattern_括号变量中的内容吗?如果我放置$ff=preg_替换([[boy]],$word,$replace,$i);这两个结果也将被$word=“##BLK”$i替换##"为什么你要将替换次数限制在
      $i
      ?这意味着
      ##BLK1#####
      最多替换一次,
      #BLK2####
      两次,等等。这是故意的吗?@killer2318您的问题似乎没有被SO软件解决。我的回答解决了您的问题还是仍然有一些不太正确的地方。Con确定问题的解决方案对未来的SO读者有利,并将您的问题标识为不再需要支持。@killer2318您的问题似乎没有通过SO软件解决。我的回答解决了您的问题,还是仍然存在一些不太正确的问题。确定问题的解决方案对未来的SO读者和读者有利将您的问题标识为不再需要支持。