regex 在数字前后添加空格

e5njpo68  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(92)

我尝试在字符串中的任何数字之前和之后添加空格。例如,如果我有JS35BX 54NV 33,我将获得JS 35 BX 54 NV 33
我用这个:

preg_replace("/(\\d)([a-z])/i", "$1 $2", $mystring)

字符串
但它只在每个数字后面添加空格。

gdx19jrr

gdx19jrr1#

使用查找框找到您希望插入空格的零宽度位置。不需要捕获组。

  • \d匹配数字字符。
  • \D匹配非数字字符。
  • (?<=...)在后面看。
  • (?=...)向前看。

产品编号:(Demo

$mystring = 'JS35BX54NV33';
var_export(preg_replace('/(?<=\D)(?=\d)|(?<=\d)(?=\D)/', ' ', $mystring));

字符串
输出量:

'JS 35 BX 54 NV 33'


var_export()用于显示没有生成前导或尾随空格。

实际上,一个更有效的模式是/\D+\K(?=\d)|\d+\K(?=\D)/,它避免了昂贵的查找,而是使用贪婪量词。这个新模式只需要47个步骤,而我以前的模式需要135个步骤。

qncylg1j

qncylg1j2#

简单地尝试,

<?php

$re = '/(\d+)/m';
$str = 'JS35BX54NV33';
$subst = ' $1 ';

$result = preg_replace($re, $subst, $str);

echo "The result of the substitution is ".$result;
?>

字符串

工作演示:https://3v4l.org/N6rSK
正则表达式https://regex101.com/r/buz2AA/1

相关问题