0

我有这样的字符串:

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

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

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

我试过使用这种语法:

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

但效果不佳。

4

3 回答 3

1

尝试:

$output = preg_replace('/(?<=\d)\s+(?=\d)/', '', $str);
于 2012-09-10T04:16:22.503 回答
0

正则表达式引擎可以更快地/以更少的步骤遍历字符串,而无需后视。

171个步骤:(演示

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

115个步骤(演示

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

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

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

在许多情况下,环视和捕获组最终会花费额外的“步骤”,因此我更喜欢寻找更有效的替代模式。

仅供参考,\K“重新启动完整的字符串匹配”。换句话说,它匹配然后忘记直到元字符位置的所有字符。

ps 您也可以使用/\d\K\s+(\d)/将步骤降低到 106 Demo,但是您需要参考捕获组,我个人的偏好是避免在替换中使用该语法。

于 2020-03-25T14:02:58.530 回答
0

试试这个 :

$input = "old iccid : 809831 3245 345 new iccid : 999000 112221"
$output = preg_replace("/(\d)\s+(\d)/", "$1$2", $input);
echo $input . "\n" . $output; //old iccid : 8098313245345 new iccid : 999000112221
于 2020-06-07T20:01:31.323 回答