【问题标题】:Regex: Add space if letter is adjacent to a number正则表达式:如果字母与数字相邻,则添加空格
【发布时间】:2012-06-13 22:31:00
【问题描述】:

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

这些是场景:

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

谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

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

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

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

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

    0a1b2c3
    

    没有解决方案会失败。​​

    【讨论】:

    • 字符旁边的数字为负数时不起作用。
    • @SayanBhattacharyya 有负街道号码吗?如果您想要该功能,只需在需要的地方添加-。只需将所有\ds 替换为[-\d]
    【解决方案2】:

    类似:

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

    应该能让你走远:)

    【讨论】:

      【解决方案3】:

      使用 POSIX 类实现可移植性:

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

      获取第一个转换。

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

      获得第二个。

      【讨论】:

        猜你喜欢
        • 2016-08-09
        • 2014-08-15
        • 2020-04-30
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 2010-09-15
        • 1970-01-01
        相关资源
        最近更新 更多