LuLa: eregi_replace und reguläre Ausdrücke

Hallo,

innerhalb einer Zeichenkette möchte ich am Satzende alle Leerzeichen vor einem Ausrufungszeichen löschen.

$message_array[$x] = eregi_replace(" !", "!", $message_array[$x]);
Funktioniert. Leider nicht, wenn es mehrere Leerzeichen sind!

$message_array[$x] = eregi_replace("([a-z[:space:]+])!", "!", $message_array[$x]);
Funktioniert, aus "Hallo !" wird "Hallo!". Leider wird aber aus "Hallo!" auch "Hall!".

Weiß jemand, wie es richtig lauten muß?

LG
LuLa

  1. Hi,

    $message_array[$x] = eregi_replace(" !", "!", $message_array[$x]);
    Weiß jemand, wie es richtig lauten muß?

    $message_array[$x] = eregi_replace(" +!", "!", $message_array[$x]);
    -------------------------------------^
    Das + bedeutet, dass das Zeichen davor (das Leerzeichen), beliebig oft, aber mindestens einmal gefunden wird.

    Thats all Folks
     eb4

    1. Dankesehr!

      Eine Frage habe ich noch:
      wie könnte ich diese Funktion so erweitern, daß dies auch für Fragezeichen gilt? Dazu brauche ich das Pipe-Symbol, oder?
      Aber das darf ich nicht in dem Ersetzungsstring verwenden.

      $message_array[$x] = eregi_replace(" +!|?", "!", $message_array[$x]); ... ist falsch, ich weiß...

      LG
      LuLa

      1. Dankesehr!

        Bitte

        Eine Frage habe ich noch:
        wie könnte ich diese Funktion so erweitern, daß dies auch für Fragezeichen gilt? Dazu brauche ich das Pipe-Symbol, oder?

        Das ist eine Möglichkeit. Eine andere, vielleicht sogar einfachere wäre,  die eregi() zweimal auszuführen.
        Also

        $message_array[$x] = eregi_replace(" +!", "!", $message_array[$x]);
        $message_array[$x] = eregi_replace(" +?", "?", $message_array[$x]);

        Anderenfalls kannst du mit Klammern und \1 arbeiten.

        $message_array[$x] = eregi_replace(" +(!|?)", "\1", $message_array[$x]);

        \1 kannst du dir als eine Variable vorstellen, die den String enthält, auf den die RegEx angeschlagen" ist. Du kannst auch noch mehr Klammern machen, dann ist es halt \1 \2 \3 ...

        Thats all Folks
         eb4