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

6
我是一名使用PHP的开发者,对于正则表达式并不是很熟悉。我需要一个preg_replace函数,它能够在字母或数字相邻的情况下添加一个空格。
以下是具体情况:
mystreet12 -> mystreet 12
mystreet 38B -> mystreet 38 B
mystreet16c -> mystreet 16 c
my street8 -> my street 8

感谢。
3个回答

10
你可以使用正则表达式的lookaround来匹配这样的位置,如下所示:
preg_replace('/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/i', ' ', $str);

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

为了使其在像这样的字符串中正常工作,需要使用前后查找。

0a1b2c3

在没有...的情况下将会失败的解决方案。


如果相邻数字为负数,则无法正常工作。 - Sayan Bhattacharyya
@SayanBhattacharyya 是否存在负街道号码? 如果您想使用此功能,则可以轻松地添加所需的-。 只需将所有的\d替换为[-\d]即可。 - Qtax

3

类似这样:

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

这应该能帮到你:)

2

使用POSIX类实现可移植性:

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

获取第一个转换。

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

获取第二个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接