如何将每个数字替换为数字[空格]


How can I replace each digit with digit[space]?

我有混合字符和数字的字符串,如何搜索数字并将其替换为新的格式?

输入:

abc def 123 456
预期输出:

abc def 1 2 3  4 5 6

I have try:

preg_replace('/'D/', '', $c)

但这不是动态的

编辑:

我忘了补充,如果数字有一个前导$,它不应该替换数字

这应该可以为您工作:

所以你想要替换数字,意味着使用'd ([0-9])而不是'D(这是其他的一切)。然后您要将每个数字替换为:X -> X 。把这些放在一起:

$c = preg_replace("/('d)(?!$)/", "$1 ", $c);

我刚刚意识到我需要跳过任何以$($1234)开头的数字。我应该在正则表达式中使用什么调整?

$c = preg_replace('~'$'d+(*SKIP)(*F)|('d)(?!$)~', "$1 ", $c);
演示

一种简单但有效的方法是:

<?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;

此外,如果您愿意,还可以以编程方式生成映射。

使用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"