6

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

这些是场景:

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

谢谢。

4

3 回答 3

10

您可以使用环视来匹配这样的位置:

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

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

需要使用 Lookarounds 才能使其与以下字符串一起正常工作:

0a1b2c3

没有解决方案就会失败。

于 2012-06-13T22:36:21.020 回答
3

就像是:

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

应该让你走远:)

于 2012-06-13T22:35:26.553 回答
2

使用 POSIX 类实现可移植性:

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

获得第一个过渡。

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

获得第二个。

于 2012-06-13T22:35:09.827 回答