关于php:如何定义正则表达式(preg_replace)以删除数字字符之间的空格

how to define regex (preg_replace) to removes space between number character

我有这样的字符串:

1
$str ="old iccid : 809831 3245 345 new iccid : 999000 112221"

如何定义正则表达式以删除PHP中数字字符之间的空格字符,成为此输出?

1
$output ="old iccid : 8098313245345 new iccid : 999000112221";

我试图使用这种语法:

1
$output = preg_replace( '/\\d[ *]\\d/', '', $str);

但效果不佳。


尝试:

1
$output = preg_replace('/(?<=\\d)\\s+(?=\\d)/', '', $str);


尝试这个 :

1
2
3
4
$input ="old iccid : 809831 3245 345 new iccid : 999000 112221"
$output = preg_replace("/(\\d)\\s+(\\d)/","$1$2", $input);
echo $input ."\
"
. $output; //old iccid : 8098313245345 new iccid : 999000112221

regex引擎可以更快地遍历字符串/以更少的步骤遍历字符串,而不会产生后顾之忧。

171个步骤:(演示)

1
/(?<=\\d)\\s+(?=\\d)/

115个步骤(演示)

1
/\\d\\K\\s+(?=\\d)/

您会看到,使用环视时,正则表达式引擎必须在每次出现空间时以1或2种方式进行查找。

通过检查数字后跟空格,正则表达式引擎仅在找到合格的两个字符序列后才需要向前看。

在许多情况下,环顾四周和捕获组最终要花费额外的"步骤",因此我更愿意寻找更有效的替代模式。

仅供参考,\\K"重新开始完整的字符串匹配"。换句话说,它匹配然后忘记了所有字符,直到元字符的位置为止。

ps。您还可以使用/\\d\\K\\s+(\\d)/将步骤降至106 Demo,但随后您需要引用捕获组,而我个人的喜好是避免在替换中使用该语法。