2012-06-13 2 views

Antwort

2

Mit POSIX-Klassen für die Portabilität:

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

bekommt die den ersten Übergang.

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

bekommt die Sekunde.

3

Etwas wie:

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

Sollten Sie weit kommen :)

+0

Funktioniert nicht mit '1a'. – Qtax

+0

Schwerwiegender Fehler: Aufruf zu undefinierter Funktion preg_replace_all() – John

6

Sie lookarounds verwenden könnte wie so solche Positionen entsprechen:

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

Je nachdem, wie Sie "Buchstaben" definieren Vielleicht möchten Sie [a-z] anpassen.

Lookarounds sind erforderlich, um es richtig wie mit Streichern funktioniert:

0a1b2c3 

Wo ohne Lösungen scheitern würden.

+0

Perfekt, danke. – John

+0

Funktioniert nicht, wenn die Nummer neben dem Zeichen negativ ist. –

+0

@SayanBhattacharyya gibt es negative Straßennummern? Wenn Sie diese Funktion wünschen, ist es einfach, das '-' hinzuzufügen, wo es gebraucht wird. Ersetzen Sie einfach alle '\ d's durch' [- \ d] '. – Qtax

Verwandte Themen