2012-06-13 8 views
5

Używam PHP i niezbyt dobrze z regex. Potrzebuję preg_replace, który może dodać spację, jeśli litera lub liczba sąsiadują ze sobą.Regex: Dodaj spację, jeśli litera sąsiaduje z numerem

Są to scenariusze:

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

Dzięki.

Odpowiedz

2

Korzystanie z klas POSIX dla przenoszenia:

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

dostaje pierwszego przejścia.

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

dostaje drugi.

3

Coś jak:

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

powinny dać Ci daleko :)

+0

Nie będzie działać z '1a'. – Qtax

+0

Błąd krytyczny: wywołanie niezdefiniowanej funkcji preg_replace_all() – John

6

Można użyć lookarounds dopasować takie pozycje tak:

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

W zależności od tego, jak zdefiniujemy "nas" możesz dostosować [a-z].

Lookarounds są wymagane, aby to działało poprawnie z ciągów znaków takich jak:

0a1b2c3 

Gdzie rozwiązania bez zawiedzie.

+0

Doskonale, dziękuję. – John

+0

Nie działa, jeśli liczba przylegająca do znaku jest ujemna. –

+0

@SayanBhattacharyya są tam ujemne numery ulic? Jeśli chcesz tej funkcji, łatwo jest dodać '-' tam, gdzie jest to potrzebne. Po prostu zamień wszystkie '\ d's na' [- \ d] '. – Qtax

Powiązane problemy