Ben: RegEx - Alle Spezialzeichen maskieren

Hallo zusammen

Ich möchte dem Benutzer die Möglichkeit geben, etwas zu suchen. Dazu kann der User gewisse Variablen benutzen, z.B. {Zahl}. Diese werden dann durch den regulären Ausdruck [0-9] ersetzt.

Jetzt mein Problem. Damit bei preg_match keine Fehler auftauchen muss ich noch die Spezialzeichen der Eingabe maskieren, also z.B. $, *, usw.

Ich habe jetzt probiert, im Eingabe-String einfach alle vorkommen dieser Zeichen mit <Spezialzeichen> zu ersetzen. Aber z.B. bei $ gibt das irgendwie komische Ergebnisse beim suchen.

Hat irgendjemand eine Funktion auf Lager, die das für alle Spezialzeichen richtig erledigt? Oder eine gute Idee? Bei der Selfhtml-Suche gibt es ja ähnliches, wie wird das dort gemacht?

Danke schon im voraus!

Gruss Ben

  1. Hallo Ben,

    Ich habe jetzt probiert, im Eingabe-String einfach alle vorkommen dieser Zeichen mit <Spezialzeichen> zu ersetzen. Aber z.B. bei $ gibt das irgendwie komische Ergebnisse beim suchen.

    Deine Vorgehensweise ist korrekt. Bei dem Dollar-Zeichen musst du aber die Spezialfunktion in PHP sehen:

      
    $counter = "1234";  
    $text    = "Sie sind der $counter. Besucher dieser Webseite.";  
    
    

    Hier dient also das Dollarzeichen als Indikator dafür, dass nun eine Variable kommt - bei doppelten Anführungszeichen. Würde man die zweite Zeile in einfache Anführungszeichen setzen, so würde die Variable dort nicht ersetzt werden.

    Wahrscheinlich hast du also folgenden String als Regex-String für das Dollarzeichen genommen:
    "$"

    Damit verliert das Dollarzeichen seine Funktion als Variableneinleiter, nicht jedoch für das Regex (denn der eigentliche String enthält so nur das Dollarzeichen, ohne den Backslash vorne dran).

    Was du suchst, ist also:
    '$' bzw. "\$"

    Generell ist mein Tipp bei Regulären Ausdrücken, stets einfache Anführungszeichen zu verwenden. Das erspart einem jede Menge Ärger.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  2. Heißa, Ben,

    Hat irgendjemand eine Funktion auf Lager, die das für alle Spezialzeichen richtig erledigt?

    Die Funktion heißt preg_quote(). Führe sie einfach auf den vom Benutzer eingegebenen String aus, bevor du deine Ersetzungen vornimmst.

    Gautera!
    Grüße aus Biberach Riss,
    Candid Dauth

    --
    Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs – von der Lage her ideal, auch für andere Vorhaben im Urlaub. Ferienwohnungen-Herrenberg.com.
    http://cdauth.de/
    1. Hey danke, das war genau was ich gesucht habe!

      Danke und Gruss
      Ben