2012-06-13 54 views
5

我正在使用PHP,並且對於正則表達式不太好。我需要一個preg_replace,如果一個字母或數字相鄰,可以添加一個空格。正則表達式:如果字母與數字相鄰,則添加空格

這些場景:

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

感謝。

回答

2

使用POSIX類可移植性:

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

得到第一個過渡。

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

獲得第二個。

3

喜歡的東西:

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

應該讓你遠:)

+0

不適用於'1a'。 – Qtax

+0

致命錯誤:調用未定義的函數preg_replace_all() – John

6

你可以使用lookarounds匹配這樣的位置,像這樣:

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

取決於你如何定義 「信」您可能需要調整[a-z]

Lookarounds需要,使其與字符串一樣正常工作:

0a1b2c3 

在哪裏解決方案,而將失敗。

+0

完美,謝謝。 – John

+0

如果與該字符相鄰的數字是負數,則不起作用。 –

+0

@SayanBhattacharyya是否有負數的街道號碼?如果你想要這個功能,在需要的地方添加'-'就很簡單了。只需用'[ - \ d]'替換所有'\ d''。 – Qtax

相關問題