String aufteilen
Eric
- php
Hi,
Ich möchte einen beliebigen String in zwei Teile aufsplitten. Der String ist dabei grundsätzlich gleich aufgebaut: zuerst Buchstaben, danach Zahlen, z.B.
dhgz15
dq122
prs77
Nun möchte ich letztendlich 2 Strings haben: den Buchstaben-Teil und den Ziffern-Teil.
Meine erste Idee wäre gewesen, das per strstr() zu lösen, doch erstens bekomm ich so ein Zeichen zu wenig (wenn ich nach dem ersten Vorkommen einer Ziffer suche), außerdem wüsste ich nicht, wie ich das anstellen sollte. Bitweise Operatoren vielleicht? Habe bereits danach gegoogelt aber nichts brauchbares gefunden.
Danke im Voraus für Beiträge.
Hallo,
RegularExpression:
^([A-Za-z])*([0-9])*$
$str1 = //1;
$str2 = //2;
Viele Grüße
RegularExpression:
^([A-Za-z])*([0-9])*$
$str1 = //1;
$str2 = //2;
Ah ja genau das habe ich gemeint aber wie genau wende ich das an?
Danke schonmal! Nur fehlt jetzt der letzte Schritt :)
Hallo,
Ah ja genau das habe ich gemeint aber wie genau wende ich das an?
http://www.selfphp.de/funktionsuebersicht/regulaere_ausdruecke_posix.php
Die Funktionen ereg() und eregi() werden für reguläre Ausdrücke verwendet.
All das nützt dir aber wenig, wenn du mit der Syntax von regulären Ausdrücken nicht vertraut bist.
Viele Grüße
All das nützt dir aber wenig, wenn du mit der Syntax von regulären Ausdrücken nicht vertraut bist.
Dann versuche ich das mal zu ändern, danke für den Link :)
Hallo nochmal,
habe jetzt eine Möglichkeit gefunden, glaube allerdings, dass das auch eleganter funktioniert ... kann mir vielleicht jemand eine bessere / effektivere Version abieten? Werde auch mal nach einer Erläuterung zu den Regular Expressions suchen aber wenn jemand einen passenden Link parat hat, nehm ich den gern entgegen :)
$str = "helloaduda124";
ereg("^([A-Za-z])*", $str,$regs);
$name = $regs[0];
ereg("^([A-Za-z])*([0-9])*", $str,$regs);
$value = substr(strrchr($str, $regs[1]),1);
Grüße,
Eric
Hallo Eric.
Werde auch mal nach einer Erläuterung zu den Regular Expressions suchen aber wenn jemand einen passenden Link parat hat, nehm ich den gern entgegen :)
Dich könnte der PCRE-Evaluator interessieren.
Einen schönen Sonntag noch.
Gruß, Ashura
gudn tach!
Werde auch mal nach einer Erläuterung zu den Regular Expressions suchen aber wenn jemand einen passenden Link parat hat, nehm ich den gern entgegen :)
viele links findest du im wikipedia-artikel zu regulaeren ausdruecken, unten.
posix-kompatible regulaere ausdruecke sind geschmackssache. den meisten leuten schmecken sie nicht. (nicht nur) in php sind die perl-kompatiblen (pcre) meist schneller.
selfhtml-erklaerung zu regulaeren ausdruecken in perl
perldoc perlre (perl manual, ausfuehrlicher)
php-manual zu pcre
$str = "helloaduda124";
[link:http://de2.php.net/manual/en/function.preg-match.php@title=preg_match]('/^([A-Za-z]*)(\d*)$/', $str, $res);
$name = $regs[0];
$value = $regs[1];
prost
seth
$str = "helloaduda124";
[link:http://de2.php.net/manual/en/function.preg-match.php@title=preg_match]('/^([A-Za-z])(\d)$/', $str, $res);
$name = $regs[0];
$value = $regs[1];
Hallo,
danke für die "Auflösung", hatte nun nach einigen weiteren Suchen ein ähnliches Ergebnis. Werde mir die Links in nächster Zeit mal vornehmen, um sicherer auf dem Gebiet zu werden.
Vielen Dank nochmals an alle.
Grüße,
Eric
Hallo Richard.
http://www.selfphp.de/funktionsuebersicht/regulaere_ausdruecke_posix.php
Die Funktionen ereg() und eregi() werden für reguläre Ausdrücke verwendet.
Sollten sie aber nicht mehr. Die PCRE-basierten Funktionen sollten an Stelle dessen genutzt werden.
Einen schönen Sonntag noch.
Gruß, Ashura
Hi!
Ich weiß nicht ob das funktioniert was ich jetzt schreibe,
aber das ist mir in den Kopf gekommen als ich deine Frage
so gelesen habe...
Versuch doch einfach jede einzelne Stelle
anzuschauen, in den ASCII Code umzuwandeln und
da ja alle kleinbuchstaben im bereich von 97 bis 122 liegen
und alle Zahlen im Bereich von 48 bis 57 kannst du ja schonmal
festlegen ab wann der zahlen bereich anfängt...
Hoffe ich konnte damit weiterhelfen, aber wie gesagt
hab es selbst noch nie gemacht...
Gruß,
Phil
Hallo,
Nun möchte ich letztendlich 2 Strings haben: den Buchstaben-Teil und den Ziffern-Teil.
Das allereinfachste ist (wenn auch nicht "beste") ist, den String einfach Zeichen für Zeichen zu überprüfen:
<?php
$buchstaben = Array();
$zahlen = Array();
$str ="aaa111";
$str_array = str_split($str);
foreach($str_array as $char){
is(is_numeric($char)){
$zahlen[] = $char;
}else{
$buchstaben[] = $char;
}
}
?>
(aus dem Kopf, ich hoffe es haut hin :))
Gruß,
Severin
Hallo,
is(is_numeric($char)){
muss natürlich if(is_numeric($char)){heissen.
Gruß,
Severin
Hallo Severin Kacianka,
danke für deine Antwort. Werde diese Variante benutzen, falls kein anderer Vorschlag bekommt, doch ist es nicht das, was ich wollte.
Grüße,
Eric
Hi Eric,
Ich möchte einen beliebigen String in zwei Teile aufsplitten. Der String ist dabei grundsätzlich gleich aufgebaut: zuerst Buchstaben, danach Zahlen, z.B.
dhgz15
dq122
prs77Nun möchte ich letztendlich 2 Strings haben: den Buchstaben-Teil und den Ziffern-Teil.
Um wirklich alle Buchstaben abzudecken, würde ich folgendes vorschlagen:
$vorher = 'blubbä123';
if( !preg_match('/\A([[:alpha:]]+)(\d+)\Z/', $vorher, $nachher) ) {
print('String entsprach nicht den Vorgaben!');
exit();
}
$buchstaben = $nachher[1];
$zahlen = $nachher[2];
// zur Anschauung
print_r($nachher);
Das Array $nachher beinhaltet dann die Teilstrings in den zur Nummer der Klammer passenden Keys. Und $nachher[0] enthält den gesamten gefundenen String.
Die "regular expression" aufgedröselt:
[:alpha:] Zeichenklasse für alle Buchstaben (nicht nur a-z und A-Z);
[[:alpha:]] Zeichen aus obiger Zeichenklasse mindestens einmal;
\d+ Zahl ("\d") mindestens einmal ("+");
\A String-Anfang;
\Z String-Ende;
Irgendwo auf pcre.org steht das auch ausführlichst erläutert.
MffG
EisFuX
Mist! Das "+" vergessen:
Statt:
[[:alpha:]] Zeichen aus obiger Zeichenklasse mindestens einmal;
... sollte es heißen:
[[:alpha:]]+ Zeichen aus obiger Zeichenklasse mindestens einmal;