正则表达式:如果字母与数字相邻,则添加空格

时间:2012-06-13 22:31:01

标签: php regex

我正在使用PHP并且对正则表达式不太满意。我需要一个preg_replace,如果字母或数字相邻,可以添加空格。

这些是场景:

mystreet12 -> mystreet 12
mystreet 38B -> mystreet 38 B
mystreet16c -> mystreet 16 c
my street8 -> my street 8

感谢。

3 个答案:

答案 0 :(得分:6)

你可以使用lookarounds来匹配这样的位置:

preg_replace('/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/i', ' ', $str);

根据您定义“字母”的方式,您可能需要调整[a-z]

需要使用外观来使其与以下字符串一起正常工作:

0a1b2c3

没有解决方案会失败。​​

答案 1 :(得分:3)

类似的东西:

preg_replace("/([a-z]+)([0-9]+)/i","\\1 \\2", $subject);

应该让你走远:)

答案 2 :(得分:2)

使用POSIX类进行移植:

preg_replace("/([[:alpha:]])([[:digit:]])/", "\\1 \\2", $subject);

获得第一次转换。

preg_replace("/([[:digit:]])([[:alpha:]])/", "\\1 \\2", $subject);

得到第二个。