我有混合字符和数字的字符串,如何搜索数字并用新格式替换它?
输入:
abc def 123 456
预期产出:
abc def 1 2 3 4 5 6
我试过了:
preg_replace('/\D/', '', $c)
但这不是动态的。
修改
我忘了补充一点,如果这些数字有一个前导$
,它就不应该替换这些数字。
答案 0 :(得分:4)
这应该适合你:
所以你想要替换数字,意味着使用\d
([0-9]
)而不是\D
(这是其他所有内容)。然后,您希望将每个数字替换为:X
- > X
。把它放在一起:
$c = preg_replace("/(\d)(?!$)/", "$1 ", $c);
我只是意识到我需要跳过以$($ 1234)开头的任何数字。我应该在正则表达式中使用什么调整?
$c = preg_replace('~\$\d+(*SKIP)(*F)|(\d)(?!$)~', "$1 ", $c);
答案 1 :(得分:1)
一种原始但功能性的方法是:
<?php
$input = 'abc def 123 456';
$mapping = [
'1' => '1 ',
'2' => '2 ',
'3' => '3 ',
'4' => '4 ',
'5' => '5 ',
'6' => '6 ',
'7' => '7 ',
'8' => '8 ',
'9' => '9 ',
'0' => '0 ',
];
foreach ($mapping as $before => $after) {
$input = str_replace($before, $after, $input);
}
echo $input;
另外,如果您愿意,可以以编程方式生成映射。
答案 2 :(得分:1)
使用preg_replace:
$str = "abc def 123 456";
$result = preg_replace('/(\d)/', ' \1 ', $str);
echo $result;
> "abc def 1 2 3 4 5 6 "
删除最后一个空格使用substr:
echo substr($result,0,-1);
> "abc def 1 2 3 4 5 6"