Php 如何用数字[空格]替换每个数字?

Php 如何用数字[空格]替换每个数字?,php,regex,string,Php,Regex,String,我有混合字符和数字的字符串,如何搜索数字并用新格式替换它 输入: abc def 123 456 预期产出: abc def 1 2 3 4 5 6 我试过: preg_replace('/\D/', '', $c) 但这不是动态的 编辑: 我忘了补充一点,如果数字有一个前导的$,它不应该取代数字。一个基本但功能性的方法是: <?php $input = 'abc def 123 456'; $mapping = [ '1' => '1 ', '2' =&g

我有混合字符和数字的字符串,如何搜索数字并用新格式替换它

输入:

abc def 123 456
预期产出:

abc def 1 2 3  4 5 6
我试过:

preg_replace('/\D/', '', $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;

实现这一点的基本方法是:

<?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;
使用:

要删除最后一个空格,请使用:

使用:

要删除最后一个空格,请使用:


这应该适合您:

因此,要替换数字,意味着使用(
[0-9]
)而不是
\D
(这是其他所有内容)。然后您要将每个数字替换为:
X
->
X
。把这些放在一起:

$c = preg_replace("/(\d)(?!$)/", "$1 ", $c);
我只是意识到我需要跳过任何以$(1234美元)开头的数字。我应该在正则表达式中使用什么调整


这应该适合您:

因此,要替换数字,意味着使用(
[0-9]
)而不是
\D
(这是其他所有内容)。然后您要将每个数字替换为:
X
->
X
。把这些放在一起:

$c = preg_replace("/(\d)(?!$)/", "$1 ", $c);
我只是意识到我需要跳过任何以$(1234美元)开头的数字。我应该在正则表达式中使用什么调整


你试过什么(研究;伪代码;代码)吗?你试过什么(研究;伪代码;代码)吗?如果我想跳过任何以$(1234美元)开头的数字如何?我将在twilio中使用它,twilio将所有数字都读作价格如果我想跳过任何以$(1234美元)开头的数字如何。我将在twilio中使用它,twilio将所有数字读取为price绝对不需要foreach循环
str_replace()
也可以将数组作为参数。绝对不需要foreach循环
str_replace()
也可以将数组作为参数。谢谢Rizier,这正是我在twilio中所需要的。谢谢你的邀请help@Rizier,我才意识到我需要跳过任何以$(1234美元)开头的数字。我应该在正则表达式中使用什么调整?tnx@Monnster那么,你的意思是当数字在括号中时,不要替换它们,或者只有当它们的格式完全相同时才替换:
$($XXXX…
?如果数字带有美元符号NOT REPLACER谢谢Rizier,这正是我在twilio中的问题所需要的。谢谢你的邀请help@Rizier,我才意识到我需要跳过任何以$(1234美元)开头的数字。我应该在正则表达式中使用什么调整?tnx@Monnster那么,你的意思是当数字在括号中时,不要替换它们,或者仅当它们的格式完全相同时:
$($XXXX…
?如果数字有美元符号,不要替换
$c = preg_replace('~\$\d+(*SKIP)(*F)|(\d)(?!$)~', "$1 ", $c);