我正在使用PHP并且对正则表达式不太满意。我需要一个preg_replace,如果字母或数字相邻,可以添加空格。
这些是场景:
mystreet12 -> mystreet 12
mystreet 38B -> mystreet 38 B
mystreet16c -> mystreet 16 c
my street8 -> my street 8
感谢。
答案 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);
得到第二个。