Saadat: Regulärer Ausdruck (wie geht das eigentlich?)

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

  1. 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

  2. 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.