-->

试图替换字符串的部分开始相同的搜索字符试图替换字符串的部分开始相同的搜索字符(Trying to r

2019-05-12 12:28发布

我试图取代我的字符串的部分。 但是,我遇到了,当我搜索字符串开始与同一个字符一个问题:

$string = "Good one :y. Keep going :y2"; 

$str = str_replace(array_keys($my_array), array_values($my_array), $string);   
$my_array= array(":y" => "a", ":y2" => "b");

输出继电器:

Good one a. Keep going a2

我需要我的str_replace()来字正确/完全匹配。

Answer 1:

此外,你应该定义数组首先你使用它之前,这应该为你工作:

$str = strtr($string, $my_array);

你的问题是, str_replace()会遍历整个字符串并取代一切可能,你还可以看到这个说明书中无。

并从那里报价:

由于str_replace()函数替换左到右 ,它可能会进行多次更换当替换以前插入的值 。 另请参见本文档中的例子。

因此,对于这个我用strtr()在这里,因为它首先尝试匹配在搜索中最长的字节。

您也可以手动,并从那里报价在这样说的:

如果给定的两个参数,所述第二格式应为阵列中的(“从” =>“到”,...)的阵列。 返回值是其中阵列密钥的所有出现已被替换的相应值的字符串。 最长的键将被首先尝试。 一旦串已经更换,新值将不会被再次搜索。



Answer 2:

先尝试了更换:y2 ,然后:y

$string = "Good one :y. Keep going :y2"; 

$my_array= array(":y2" => "b", ":y" => "a");

$str = str_replace(array_keys($my_array), array_values($my_array), $string);

输出

Good one a. Keep going b

试试吧



Answer 3:

:y\b

使用此仅更换:y ,而不是:y2 。看到演示。

https://regex101.com/r/sJ9gM7/9

$re = "":y\\b"m";
$str = "Good one :y. Keep going :y2\n";
$subst = "a";


$result = preg_replace($re, $subst, $str);

同样,对于:y2使用:y2\b



文章来源: Trying to replace parts of string start with same search chars