Wie sämtliche Buchstaben und Zahlen aus einem String trennen?

mnbvcxy

Mitglied
Wie gesagt, ich möchte gerne aus einem beliebigen String jeweils alle zusammenhängenden Buchstaben und Zahlen bekommen. Es würde auch reichen das jeweils bei einem "Übergang" von Zahl zu Buchstabe und umgekehrt ein Leerzeichen eingefügt wird.

Ich denke das das ganze über reguläre Ausdrücke gehen wird, aber weiter als so bin ich nicht gekommen:

PHP:
$string = "abc20mnb16vcx";
preg_match("/([0-9]+)([a-z]+)/i", $string, $result);

Ausgegeben wird dann:
$result[0] = 20mnb
$result[1] = 20
$result[2] = mnb

Mal abgesehen das der erste Teil abgeschnitten wird, wie schaffe ich es, das dieser Vergleich mehrfach angewendet wird?
Sprich so in der Art
([ (obigerAusdruck) ]*)
 
Versuchs mal mit dem hier: ([0-9a-zA-Z]) (ungetestet) in Verbindung mit der Funktion [phpf]preg_match_all[/phpf].

greetz
daddz
 
Ich hoffe, ich habe dich richtig verstanden:
PHP:
<?php

	$string = 'abc20mnb16vcx';
	$string = preg_replace('/[a-z]+|[0-9]+/', '\0 ', $string);

?>
 
Ich habe den Thread wider geöffnet, leider hat sich nämlich ein blöder Effekt eingestellt.
Das auseinandernehmen des Strings klappt super, nur für die weitere Verwendung gibt es einen komischen Effekt.

Wenn man dieses ersetzen mehrmals anwendet, wird aus einem Leerzeichen zwei, aus zwei drei usw. usf.
Dummerweise ist ein String-Vergleich dann nicht mehr möglich, da
Code:
"abc 20" != "abc  20"
ist.

Gibt es ne Möglichkeit nur dann Leerzeichen einzufügen, wenn vorher keins da war
 
Wieso wendest du die Funktion mehrmals an? Ändere den regulären Ausdruck mal wie folgt:
Code:
/(?:[a-z]+|[0-9]+)[^\s]/
 
Der Hintergrund ist folgender:

Man sucht nach einem Begriff, und sollte kein Treffer erfolgen wird ein Vorschlag unterbreitet. Dieser Vorschlag ist halt Leerzeichen dort wo buchstaben und zahlen "aufeinandertreffen".

Das funktioniert auch alles sehr gut, nur wenn man einen Begriff eingibt, der keine Treffer erzielt und auf den Vorschlag klickt und auch dieser keinen Treffer erzielt, geht das endlos so weiter, mit dem Unterschied, das der Suchstring langsam anwächst und immer mehr Leerzeichen enthält.
Ein Vergleich des Suchbegriffs und dem Vorschlag scheitern an den unterschiedlichen Leerzeichen...

Geht leider mit deinem 2. Vorschlag auch nicht :(

[edit]
Das verdeutlicht das Problem:

//Simuliert einen Suchbegriff
<a href="test.php?suchwort=abc20def">start</a>

<?php
$alt_search = preg_replace('/[a-z]+|[0-9]+/', '\0 ', $suchwort);

$alt_search = trim($alt_search);
$suchwort = trim($suchwort);

echo "<pre>$suchwort</pre>";
echo "<pre>$alt_search</pre>";

echo "Meinten Sie: <a href=\"test.php?suchwort=$alt_search\">$alt_search</a>";
?>
Wenn man weiter auf den Vorschlag klickt, werden immer mehr Leerzeichen eingefügt...
 
Zuletzt bearbeitet:
Nächster Versuch: entferne einfach doppelte Leerzeichen:
PHP:
$string = 'abc20mnb16vcx';
$string = str_replace('  ', ' ', preg_replace('/[a-z]+|[0-9]+/', '\0 ', $string));
 
Uhhh...das sieht guut aus!!

DANKE!

Hab schon langsam verzweifelt.
Das mit dem doppelten Leerzeichen war auch mein Gedanke, ich hab 5 oder 6 verschiedene Varianten gesehen. Da das nicht klappte, mit deinem Beispiel aber doch, hab ichs damit nochmal probiert.
Total irre. Obwohl mit <pre> ausgegen ergibt ein md5 hash nicht dasselbe (leerzeichen vorne und hinten auch überprüft.
Scheinbar gibt es verschiedene Arten von Leerzeichen... :confused:
 
Zurück