我试图取代我的字符串的部分。 但是,我遇到了,当我搜索字符串开始与同一个字符一个问题:
$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()
来字正确/完全匹配。
此外,你应该定义数组首先你使用它之前,这应该为你工作:
$str = strtr($string, $my_array);
你的问题是, str_replace()
会遍历整个字符串并取代一切可能,你还可以看到这个说明书中无。
并从那里报价:
由于str_replace()函数替换左到右 ,它可能会进行多次更换 ■ 当替换以前插入的值 。 另请参见本文档中的例子。
因此,对于这个我用strtr()
在这里,因为它首先尝试匹配在搜索中最长的字节。
您也可以手动,并从那里报价在这样说的:
如果给定的两个参数,所述第二格式应为阵列中的(“从” =>“到”,...)的阵列。 返回值是其中阵列密钥的所有出现已被替换的相应值的字符串。 最长的键将被首先尝试。 一旦串已经更换,新值将不会被再次搜索。
先尝试了更换: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
试试吧
: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
。