英文:
replace exact string in another string
问题
我有一个变量数组
array(2) {
["M"]=>
string(3) "500"
["MA"]=>
string(3) "200"
}
以及字符串 "1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"
我需要将M替换为值500,将MA替换为值200。当我使用str_replace时,它只适用于M,因为它仍然与第一个变量M匹配。
感谢帮助。
英文:
I have array of vars
array(2) {
["M"]=>
string(3) "500"
["MA"]=>
string(3) "200"
}
AND strings "1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"
And I need to replace M with value 500, and MA with value 200. When I use str_replace it works but only for M, because it still match with first var M
Thanks for help
答案1
得分: 0
你可以使用 preg_replace_callback()
函数来使用正则表达式匹配变量名。
foreach ($strings as &$str) {
$str = preg_replace_callback('/\b(M|MA)\b/', function ($matches) use ($array) {
return $array[$matches[1]];
}, $str);
}
英文:
You can use preg_replace_callback()
function to match the variable names using regex.
foreach ($strings as &$str) {
$str = preg_replace_callback('/\b(M|MA)\b/', function ($matches) use ($array) {
return $array[$matches[1]];
}, $str);
}
答案2
得分: 0
$strings = ["1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"];
$replace = ['M' => '500', 'MA' => '200'];
krsort($replace);
foreach ($strings as $str) {
echo $str . ':' . str_replace(array_keys($replace), $replace, $str) . PHP_EOL;
}
// 1000-M => 1000-500
// 1000-MA => 1000-200
// 1000+MA-M => 1000+200-500
// MA/2 => 200/2
// M*MA+100 => 500*200+100
英文:
You can sort your replace array by longest keyword first, so that it will be replaced first, and only later on replace shorter keys:
$strings = ["1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"];
$replace = ['M' => '500', 'MA' => '200'];
krsort($replace);
foreach ($strings as $str) {
echo $str . ':' . str_replace(array_keys($replace), $replace, $str) . PHP_EOL;
}
// 1000-M => 1000-500
// 1000-MA => 1000-200
// 1000+MA-M => 1000+200-500
// MA/2 => 200/2
// M*MA+100 => 500*200+100
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论