我尝试在字符串中的任何数字之前和之后添加空格。例如,如果我有JS35BX 54NV 33,我将获得JS 35 BX 54 NV 33我用这个:
preg_replace("/(\\d)([a-z])/i", "$1 $2", $mystring)
字符串但它只在每个数字后面添加空格。
gdx19jrr1#
使用查找框找到您希望插入空格的零宽度位置。不需要捕获组。
\d
\D
(?<=...)
(?=...)
产品编号:(Demo)
$mystring = 'JS35BX54NV33'; var_export(preg_replace('/(?<=\D)(?=\d)|(?<=\d)(?=\D)/', ' ', $mystring));
字符串输出量:
'JS 35 BX 54 NV 33'
型var_export()用于显示没有生成前导或尾随空格。
var_export()
实际上,一个更有效的模式是/\D+\K(?=\d)|\d+\K(?=\D)/,它避免了昂贵的查找,而是使用贪婪量词。这个新模式只需要47个步骤,而我以前的模式需要135个步骤。
/\D+\K(?=\d)|\d+\K(?=\D)/
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
2条答案
按热度按时间gdx19jrr1#
使用查找框找到您希望插入空格的零宽度位置。不需要捕获组。
\d
匹配数字字符。\D
匹配非数字字符。(?<=...)
在后面看。(?=...)
向前看。产品编号:(Demo)
字符串
输出量:
型
var_export()
用于显示没有生成前导或尾随空格。实际上,一个更有效的模式是
/\D+\K(?=\d)|\d+\K(?=\D)/
,它避免了昂贵的查找,而是使用贪婪量词。这个新模式只需要47个步骤,而我以前的模式需要135个步骤。qncylg1j2#
简单地尝试,
字符串
工作演示:https://3v4l.org/N6rSK。
正则表达式https://regex101.com/r/buz2AA/1