当我们想批量替换文本中的某些字符的时候, 比如“AB”、“A”,分别替换为“[AB]”、“[A]”。如果使用
str_replace(array('AB', 'A'), array('[AB]', '[A]'), 'ABA')
则结果并不是我们想要的
[[A]B][A]
根据结果,可以发现,str_replace会遍历第一个参数中的每一个元素去替换为第二个参数中相同位置的元素。
第二个元素遍历时,第一个已经生效。比如上边的例子,在第一次遍历后的结果
[AB]A
此时,再次查找“A”替换为“[A]”。结果就不是我们想要的了。
之前在使用EmEditor进行批量正则匹配替换的时候,发现过类似第二次替换会把之前的操作结果误替换的问题。
就使用的中间变量的方法。比如,“AB”先替换成“#”(当然,是文本中不存在的东西,也不会是后边有替换需求的字符),
然后,进行其他替换操作,最后再将“#”替换成“[AB]”。
而在PHP中,使用str_replace函数可直接进行如此操作。
str_replace(array('AB', 'A', '#'), array('#', '[A]', '[AB]'), 'ABA')
结果
[AB][A]