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

Joh*_*ohn 5 php regex

我正在使用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)

谢谢.

Qta*_*tax 7

您可以使用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)

没有解决方案会失败.


Gra*_*ham 2

使用 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)

得到第二个。