在数字前后添加空格

Tio*_*neb 3 php regex preg-replace

我正在尝试在字符串中的任何数字之前和之后添加空格。例如,如果我有 JS35BX54NV33,我将得到 JS 35 BX 54 NV 33

我正在使用这个:

preg_replace("/(\\d)([a-z])/i", "$1 $2", $mystring)
Run Code Online (Sandbox Code Playgroud)

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

mic*_*usa 5

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

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

代码:(演示

$mystring = 'JS35BX54NV33';
var_export(preg_replace('/(?<=\D)(?=\d)|(?<=\d)(?=\D)/', ' ', $mystring));
Run Code Online (Sandbox Code Playgroud)

输出:

'JS 35 BX 54 NV 33'
Run Code Online (Sandbox Code Playgroud)

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

实际上,一种更有效的模式是/\D+\K(?=\d)|\d+\K(?=\D)/避免昂贵的后向查找,而是使用贪婪量词。这个新模式在示例字符串上只需要 47 个步骤,而我之前的模式需要 135 个步骤。