我有这样的字符串:
$str = "old iccid : 809831 3245 345 new iccid : 999000 112221"
如何定义正则表达式以删除PHP中数字字符之间的空格字符,以成为此输出?
$output = "old iccid : 8098313245345 new iccid : 999000112221";
我尝试使用这种语法:
$output = preg_replace( '/\d[ *]\d/', '', $str);
但效果不佳。
答案 0 :(得分:1)
尝试:
$output = preg_replace('/(?<=\d)\s+(?=\d)/', '', $str);
答案 1 :(得分:0)
regex引擎可以更快地遍历字符串/步数更少,而不会后退。
171步:(Demo)
/(?<=\d)\s+(?=\d)/
115个步骤(Demo)
/\d\K\s+(?=\d)/
您看到,在使用环视时,正则表达式引擎必须在每次出现空格时使用1或2种方式。
通过检查数字后跟空格,正则表达式引擎仅在找到合格的两个字符序列后才需要向前看。
在许多情况下,环顾四周和捕获组会花费额外的“步骤”,因此我更愿意寻找更有效的替代模式。
仅供参考,\K
“重新开始完整的字符串匹配”。换句话说,它匹配后会忘记所有字符,直到元字符的位置为止。
p.s。您还可以使用/\d\K\s+(\d)/
将步骤降到106 Demo,但随后需要引用捕获组,而我个人的喜好是避免在替换中使用该语法。
答案 2 :(得分: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