我正在使用PHP而且与正则表达式不太相配.我需要一个preg_replace,如果字母或数字相邻,可以添加空格.
这些是场景:
mystreet12 -> mystreet 12
mystreet 38B -> mystreet 38 B
mystreet16c -> mystreet 16 c
my street8 -> my street 8
Run Code Online (Sandbox Code Playgroud)
谢谢.
您可以使用lookarounds来匹配这样的位置,如下所示:
preg_replace('/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/i', ' ', $str);
Run Code Online (Sandbox Code Playgroud)
根据您定义"字母"的方式,您可能需要调整[a-z].
需要使用Lookarounds才能使其与以下字符串一起正常工作:
0a1b2c3
Run Code Online (Sandbox Code Playgroud)
没有解决方案会失败.
使用 POSIX 类实现可移植性:
preg_replace("/([[:alpha:]])([[:digit:]])/", "\\1 \\2", $subject);
Run Code Online (Sandbox Code Playgroud)
获得第一个转换。
preg_replace("/([[:digit:]])([[:alpha:]])/", "\\1 \\2", $subject);
Run Code Online (Sandbox Code Playgroud)
得到第二个。