Martin: ereg-Funktion

Hallo Leute,

ich habe folgendes Problem:

Ich habe einen String $test und möchte in diesem nach den vier Zeichen ' " $ \ suchen.

Nun habe ich die ereg-Funktion:

if(ereg ("           ",$test)) {}

Nun meine Frage:

Wie muß der Syntax zwischen den beiden Hochkommas aussehen, damit es klappt. Was mir Probleme bereitet, ist das Zeichen ".

Martin

  1. Das Zeichen " ist in PHP einfach "
    Wenn das dein Problem war dann ist es hiermit aus der Welt ;)

    1. Nicht ganz:

      Bei der Befehlszeile

      if ereg("($\"'",$test)

      bekomme ich eine Fehlermeldung. Was mir fehlt, ist der Syntax für die vier Zeichen " ' $ \ zwischen den Hochkommaten.

      Martin

      1. if ereg("($\"'",$test)

        bekomme ich eine Fehlermeldung. Was mir fehlt, ist der Syntax für die vier Zeichen " ' $ \ zwischen den Hochkommaten.

        Ja dieses Zeichen \ ist in PHP die Einleitung für diese ganzen Konstanten wie \n \t etc... Du solltest mal
        if ereg("($\"'",$test)
        probieren. Denn \ ist umgewandelt \ Gruß
        Hanno

        1. Funktioniert nicht, ich bekomme die Fehlermeldung:

          Parse error: parse error, expecting `'('' in /homepages/29/d72282833/htdocs/xxx/xxx/xxx/xxx.php on line 25

          und vertage das Problem auf Morgen.

          Trotzdem Danke und gute Nacht

          Martin

          1. Ach scheisse ich dummkopf.
            Ich glaube das $ ist auch wieder ein sonderzeichn.
            Probier mal:
            if ereg("($\"'",$test)
            Das müsste doch jetzt gehen.
            Gruß
            Hanno

  2. vielleicht solltest du einmal genauer beschreiben, was du mit "suchen" meinst - ob $ " etc. im String vorkommen oder nicht?
    egal was du suchst, ich denke unter http://www.php.net/ereg wirst du eine lösung für dein problem finden!!

    gruß
    Robin

  3. Moin!

    Ich habe einen String $test und möchte in diesem nach den vier Zeichen ' " $ \ suchen.

    Alle diese Zeichen sind potentiell Zeichen mit Sonderbedeutung. Solche Zeichen werden mit dem Backslash escaped, damit sie ihre Sonderbedeutung verlieren.

    Je nachdem, was du nun wirklich genau suchst, sieht dein regulärer Ausdruck aus.

    Außerdem: Verwende nicht ereg, sondern preg_match. Diese Funktion ist schneller und binärsicher und tut ansonsten das Gleiche - hat also nur Vorteile.

    - Sven Rautenberg

    --
    Signatur oder nicht Signatur - das ist hier die Frage!
    1. Irgendwie schnalle ich das überhaupt nicht:

      Ich will, wenn in dem String $pwd ein " vorkommt, dass die Anweisung ausgeführt wird. Schreibe ich es so:

      if (preg_match (""", $pwd)) {Anweisung}

      bekomme ich die Fehlermeldung

      Warning: No ending delimiter '"' found in /homepages/29/d72282833/htdocs........

      Und {Anweisung} wird ignoriert. Ich finde nicht, wo der Wurm drin ist.

      Martin

      1. tjaaa...
        auf jedenfall müsste es auch mit

        if(!(strpos($pwd, """) === false)) {
        echo "enthält "!!!";
        }

        gehen...

        Robin

  4. Hallo Martin,

    das sollte eigentlich sein, was du suchst, oder?

    if(ereg ("['"$]",$test)) {}

    Schönen Gruß aus München

    die knappschaft

    --

    sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
    1. Nicht ganz,

      mir ist der Syntax klar, nur habe ich ein Problem mit den Sonderzeichen, auch wenn ich ein Backshlash davor mache, bekomme ich ständig ein Parse error. Versuche einmal, die Zeile auszuführen, welche du gepostet hast.

      Trotzdem Danke

      Martin

      1. Hallo Martin,

        hatte etwas schnell geschossen....

        aber dies ist getestet

        if(!preg_match("[\'"$]",$test)) {
        echo "das passt so";
        }

        Schönen Gruß aus München

        die knappschaft

        --

        sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
        1. Hallo Sascha,

          ich möchte dich ja nicht frustrieren, aber wenn du als $test z.B. ein a nimmst, kommt auch "dass passt so". Genauso wie bei den Zeichen " ' $ . Zumindest bei mir.

          Grüße aus dem Zentrum des Schwobalands nach Bavaria

          Martin

          1. Okay, so klappt es:

            if (preg_match("/["]|[']|[$]/",$pwd))

            Danke an alle.

            Martin

            1. Moin!

              Okay, so klappt es:

              if (preg_match("/["]|[']|[$]/",$pwd))

              Das sollte aber auch einfacher gehen.

              Grund für deine Probleme war, dass die / vor und hinter dem regulären Ausdruck gefehlt haben. Irgendwelche Begrenzer für den regulären Ausdruck muß man in PHP aber noch _zusätzlich_ zum Stringbegrenzer angeben. Das ist üblicherweise das erste Zeichen im String, es muß kein / sein. Ausrufezeichen gehen z.B. auch. Es kann hilfreich sein, hier ein Zeichen zu wählen, was im regulären Ausdruck nicht oder am wenigsten auftritt, weil man dieses Zeichen ansonsten immer escapen muß.

              Aber zurück zur Vereinfachung: Das, was du da produziert hast, geht genauso gut mit
              preg_match("/["'$]/",$pwd)

              [] umschließen Zeichenklassen. Eine Zeichenklasse steht für eines der dort enthaltenen Zeichen an der jeweiligen Stelle. Dein Konstrukt hat drei Zeichenklassen mit jeweils einem einzigen Zeichen definiert, und mit dem Oder-Operator | verknüpft. Kommt auf dasselbe heraus, ist aber nicht wirklich elegant.

              - Sven Rautenberg

              --
              Signatur oder nicht Signatur - das ist hier die Frage!
              1. Danke...

                ... hast mir sehr weitergeholfen.

                Die Metropole des Schwobalands grüßt Hamburg!

                Martin