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读者和读者有利将您的问题标识为不再需要支持。