2012-06-13 2 views
5

私はPHPを使用しており、正規表現ではあまりよくありません。文字または数字が隣接している場合はスペースを追加できるpreg_replaceが必要です。Regex:文字が数字に隣接している場合は空白を追加します

これらはシナリオです:

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('/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/i', ' ', $str); 

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

がはるかにあなたを取得する必要があります:)

+0

「1a」では動作しません。 – Qtax

+0

致命的なエラー:未定義関数を呼び出すpreg_replace_all() – John

6

をあなたがそうのような位置に一致するように前後参照を使用することができます[a-z]を調整することができます。

のないソリューションが失敗する
0a1b2c3 

前後参照は、それがのような文字列を正しく動作させるために必要とされています。

+0

パーフェクト、ありがとう。 – John

+0

文字に隣接する数字が負の場合は機能しません。 –

+0

@SayanBhattacharyyaにはマイナスの通り番号がありますか?その機能が必要な場合は、必要なところに '-'を追加するのは簡単です。すべての '\ d'を' [ - \ d] 'に置き換えてください。 – Qtax

関連する問題