RuD: Regulärer Ausdruck

Seid gegrüßt!
ich versuche einen String zu teilen und in eine Tabelle zubekommen, also nur die "</td><td>"-Trennung reinzubekommen.

Ich habe u.a. einen Preis "44,12 Euro" also über

preg_replace("[0-9]{1,3},[0-9]{0,2} Euro", "</td><td>", $string);

auswerten. Nur kommt es ersten zum fehler
Warning: Unknown modifier '{' in ... on line 15

und zweites (wenns denn gehen sollte) ersetzt das script ja 44,12 Euro durch </td><td>. ich wollte aber nicht ersetzen sondern davor schreiben, also </td><td>44,12 Euro.

Kann mir jemand helfen? Danke schön schonmal im Voraus.

--
Bis Später
                       __
      ________   _____/ //
     / ___   // / __   //
    / //  / //_/ /_/  //
   /_//  /___________//
==========================================================
Testversion meiner Seite: http://www.rudweb.de/test2
  1. hi,

    preg_replace("[0-9]{1,3},[0-9]{0,2} Euro", "</td><td>", $string);

    auswerten. Nur kommt es ersten zum fehler
    Warning: Unknown modifier '{' in ... on line 15

    Da als erstes Zeichen [ verwendet wird, ist das der Delimiter deines regulären Ausdrucks.
    Also ist ] kein Sonderzeichen mehr, weil keine öffnende eckige Klammer vorausgeht.
    Also beendet das nächste vorkommende ] das Suchmuster, weil es der schließende Delimiter ist.
    Also ist das nach dem Delimiter stehende { ein unbekannter Modifier.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Also beendet das nächste vorkommende ] das Suchmuster, weil es der schließende Delimiter ist.

      Sorry, das nächste [ ist natürlich der schließende Delimiter, weil beide Delimiter ja gleich sein müssen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. echo $begrüßung;

        Also beendet das nächste vorkommende ] das Suchmuster, weil es der schließende Delimiter ist.
        Sorry, das nächste [ ist natürlich der schließende Delimiter, weil beide Delimiter ja gleich sein müssen.

        Nö. Es sei dennn, PHP < 4.0.4 wird verwendet. (), {}, [], und <> sind seitdem auch gültige Begrenzer-Paare.

        echo "$verabschiedung $name";

        1. Seid gegrüßt!
          ich komm ne weiter:

          ich brauch den regex für "44,12 Euro" oder ähnlich.
          also dacht ich mir: string fängt mit ner Zahl ([0-9]) an die 1-3-stellig ist ({1,3}), dannach kommt ein Komma, danach wieder ne Zahl ([0-9]{1,2}) dann ein freizeichen und dann "Euro". sieht immer so aus.

          wo ist mein denkfehler?

          --
          Bis Später
                                 __
                ________   _____/ //
               / ___   // / __   //
              / //  / //_/ /_/  //
             /_//  /___________//
          ==========================================================
          Testversion meiner Seite: http://www.rudweb.de/test2
          1. Hi,

            also wenn ich dich richtig versteh willst du vor 42,12 Euro </td><td> schreiben!

            Müsste auf die schnelle so etwa aussehen:
            preg_replace("/([1]{1,3}(,){1}[0-9]{0,2}(Euro){1}$)/", "$1</td><td>", $string);

            gruß


            1. 0-9 ↩︎

            1. P.S.:

              http://www.php-resource.de/tutorials/read/10/1/

            2. gudn tach!

              preg_replace("/([1]{1,3}(,){1}[0-9]{0,2}(Euro){1}$)/", "$1</td><td>", $string);
                                         ^1  ^2           ^3     ^2

              1. komma muss nicht escaped werden. und die einklammerung ist ueberfluessig.

              2. {1} ist redundant, kann einfach weggelassen werden.

              3. "Euro" muss nicht eingeklammert werden.

              vielleicht genuegt ja schon einfach
              preg_replace('/(\d Euro)/', '$1</td><td>', $string);

              prost
              seth


              1. 0-9 ↩︎

        2. hi,

          Nö. Es sei dennn, PHP < 4.0.4 wird verwendet. (), {}, [], und <> sind seitdem auch gültige Begrenzer-Paare.

          Habe ich etwas anderes behauptet?

          Ich sagte, _weil_ [ an öffnender Delimiter verwendet wird, wird das zweite auftauchende [ als schließender gewertet.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. echo $begrüßung;

            Nö. Es sei dennn, PHP < 4.0.4 wird verwendet. (), {}, [], und <> sind seitdem auch gültige Begrenzer-Paare.

            Habe ich etwas anderes behauptet?

            Ja, du siehst diese Zeichen nicht als Paare sondern einzeln.

            Ich sagte, _weil_ [ an öffnender Delimiter verwendet wird, wird das zweite auftauchende [ als schließender gewertet.

            Und das ist eben nicht der Fall, sonst stünde auch 0 und nicht { in der Fehlermeldung. Wenn [ als öffnender Begrenzer verwendet wird kommt ] als schließender zur Anwendung. Das im OP nachfolgende { (das erste, dem die 1 folgt) wird schon als Modifizierer gewertet.

            echo "$verabschiedung $name";

            1. hi,

              Wenn [ als öffnender Begrenzer verwendet wird kommt ] als schließender zur Anwendung.

              Ah, danke - das war mir noch nicht bewusst.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Seid gegrüßt!

      preg_replace("[0-9]{1,3},[0-9]{0,2} Euro", "</td><td>",

      Muss also der gesamte Ausdruck in [] oder was?
      Also [0-9{1,},0-9{0,2} Euro] ?

      --
      Bis Später
                             __
            ________   _____/ //
           / ___   // / __   //
          / //  / //_/ /_/  //
         /_//  /___________//
      ==========================================================
      Testversion meiner Seite: http://www.rudweb.de/test2
  2. Sei Du auch gegrüßt ;-)

    Zu 2.: Wenn das Muster, nachdem Du suchst, in dem ersetzten String wieder vorkommen soll, musst Du das in runde Klammern setzen. Im "Ersetzen"-String setzt Du dann an geeignete Stelle ein "\1" (die Dinger werden nummeriert), in Deinem Fall also "</td><td>\1".

    Viel Erfolg!

    preg_replace("[0-9]{1,3},[0-9]{0,2} Euro", "</td><td>", $string);

    und zweites (wenns denn gehen sollte) ersetzt das script ja 44,12 Euro durch </td><td>. ich wollte aber nicht ersetzen sondern davor schreiben, also </td><td>44,12 Euro.