Regulärer Ausdruck (wie geht das eigentlich?)
Saadat
- php
Hallo allerseits,
ich möchte aus einer Zeichenkette alle "-" Zeichen, die zwischen den Postleitzahlen stehen, durch ein anderes Zeichen ersetzen.
Beispiel: 26588-26989
Wie lautet der reguläre Ausdruck, der nur die "-" Zeichen zwischen den Postleitzahlen findet und durch was anderes ersetzt, d. h. es stehen auch andere "-" Zeichen innerhalb der Zeichenkette, diese sollen aber davon unberührt bleiben.
Kann mir jemand mit seiner/ihrer kreativen Idee helfen?
Danke im Voraus!
Gruß
Saadat
Hallo Saadat!
Beispiel: 26588-26989
Wie lautet der reguläre Ausdruck, der nur die "-" Zeichen zwischen den Postleitzahlen findet und durch was anderes ersetzt, d. h. es stehen auch andere "-" Zeichen innerhalb der Zeichenkette, diese sollen aber davon unberührt bleiben.
Welche Zeichen sollen vorkommen:
Fünf Ziffern ein Bindestrich und noch fünf Ziffern.
also erstaml Ziffern, darauf passt \d.
Dann 5 Stück: \d{5}
Der Bindstrich passt auf den Bindestrich.
Zusammengebaut:
\d{5}-\d{5}
Nun möchtest du im Ergebnis ja die Ziffern wieder haben, dazu muss der jeweils passende Teil geklammert werden. (Dann kann man drauf zugreifen)
(\d{5})-(\d{5})
http://www.php.net/manual/en/pcre.pattern.syntax.php
So, jetzt das ganze noch in die preg_replace funktion einsetzen:
$neu=preg_replace("/(\d{5})-(\d{5})/","\1-\2",$alt);
| |
| +--zweite Klammer
+------erste Klammer
einsetzen
Gruss,
Carsten
Hi.
Probier es mal hiermit:
$t = "26588-26989";
$anderes_zeichen = "x";
$t = preg_replace("/(\d{5})-(\d{5})/","\1$anderes_zeichen\2",$t);
Erklärungen:
Zeile 1+2: leicht verständlich, einfache Variablenzuweisung.
Zeile 3: Reguläre Substitution nach Perl-Syntax.
/ / schließt die Regex ein.
\d ist eine Ziffer, wir brauchen 5 Stück davon, dafür ist die {5} dahinter. \d{5} bedeutet: genau 5 Ziffern.
Die Klammern sind dazu da, alles was vor und hinter dem - steht, einzufangen, später kann per \1 und \2 (hier per \ escaped, daher \1 und \2) wieder aufgerufen werden.
Kurz: es werden 5 Ziffern, dann ein -, dann wieder 5 Ziffern gesucht. Wenn dies zutrifft, werden die Ziffern genommen und zusammen mit $anderes_zeichen wird ein neuer String erstellt. Falls mehrere Funstellen im String sind, werden alle ersetzt.
Ich hoffen, das war verständlich! :-)
MfG, Arne P.