preg_replace problem?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace problem?

    Hallo,

    ich habe eine Database, db.txt
    --------------------------
    <seat1.1|0>
    <seat1.2|0>
    <seat1.3|0>
    <seat1.4|0>
    <seat2.1|0>
    <seat2.2|0>
    <seat2.3|0>
    <seat2.4|0>
    <seat3.1|0>
    <seat3.2|0>
    <seat3.3|0>
    <seat3.4|0>
    <seat4.1|0>
    <seat4.2|0>
    <seat4.3|0>
    <seat4.4|0>
    ----------------------------

    eine Php Code,
    ---------------------------------------------------
    $quelle = implode ("", file ("db.txt"));
    $id="seat1.4";
    $pattern = '/(<'.$id.'\|)([0-9]+)(>)/iUs';
    $matNr="7063702";
    echo preg_replace($pattern, '$1'.$matNr.'$3',$quelle,1);
    ---------------------------------------------------


    es muss mit dieser Code, neben seat1.4 stehende 0 mit dem Wert $matNr gewächselt werden. Aber es funktioniert mit diesem regulären Ausdruck nicht so ganz. Kommt so ein Ergebniss raus:

    ------------------------
    <seat1.1|0>
    <seat1.2|0>
    <seat1.3|0>
    063702>
    <seat2.1|0>
    <seat2.2|0>
    <seat2.3|0>
    <seat2.4|0>
    <seat3.1|0>
    <seat3.2|0>
    <seat3.3|0>
    <seat3.4|0>
    <seat4.1|0>
    <seat4.2|0>
    <seat4.3|0>
    <seat4.4|0>
    --------------------------

    Also erste character von $matNr wurde gelöcht und ist so geblieben 063702. Wenn ich aber nach $1 leer Zeichen lasse, dann funktioniert es.

    also:
    Php Code,
    ---------------------------------------------------
    $quelle = implode ("", file ("db.txt"));
    $id="seat1.4";
    $pattern = '/(<'.$id.'\|)([0-9]+)(>)/iUs';
    $matNr="7063702";
    echo preg_replace($pattern, '$1 '.$matNr.'$3',$quelle,1);
    ---------------------------------------------------

    Ergebnis:
    ------------------------
    <seat1.1|0>
    <seat1.2|0>
    <seat1.3|0>
    <seat1.4| 7063702>
    <seat2.1|0>
    <seat2.2|0>
    <seat2.3|0>
    <seat2.4|0>
    <seat3.1|0>
    <seat3.2|0>
    <seat3.3|0>
    <seat3.4|0>
    <seat4.1|0>
    <seat4.2|0>
    <seat4.3|0>
    <seat4.4|0>
    --------------------------


    preg_replace oder mein regulären Ausdruck nimmt ein character weg. Ich habe nicht verstanden.

    Könnte jemand mir dafür passende regulären Ausdruck vielleicht geben oder sagen woran das Problem liegen kann.

    MfG

  • #2
    eine Frage

    warum keine richtige Datenbank?
    "Nicht jeder Mensch kann und soll Programmieren[...]".

    Kommentar


    • #3
      Re: preg_replace problem?

      Das Problem kann ich nachvollziehen - Erklärung habe ich aber aktuell keine dafür.
      Womöglich ein Bug in der Implementierung ...?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: Re: preg_replace problem?

        Original geschrieben von wahsaga
        Erklärung habe ich aber aktuell keine dafür.
        OK, doch - in dem Moment, wo ich das schreibe, wird die Erklärung doch offensichtlich.

        Als zweiten Parameter von preg_replace nutzt du '$1'.$matNr.'$3' - das ergibt, den Wert von $matNr eingesetzt, das Literal '$17063702$3'.
        Jetzt weiss nur leider das dumme preg_replace nicht mehr, ob da die Backreference $1, gefolgt von 70... meinst - oder die Backreference $17, gefolgt von 0...

        Eigentlich sollte das aber m.E. nicht passieren, da es im vorliegenden Fall keine Backreference $17 gibt - dadurch müsste dem Parser dann eigentlich klar werden, dass hier nur $1 gemeint sein kann ...


        Aber ich merke gerade, wie man das Problem umgeht, steht im übrigen sogar explizit im Manual.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Re: Re: Re: preg_replace problem?

          Hi,

          danke für ausfürliche Info. Ich verstehe auch jetzt woran das Problem liegt.

          und dafür könnte man es so ändern dann:

          $quelle = implode ("", file ("db.txt"));
          $id="seat1.4";
          $pattern = '/(<'.$id.'\|)([0-9]+)(>)/iUs';
          $matNr="7063702";
          echo preg_replace($pattern, '<'.$id.'|'.$matNr.'>',$quelle,1);

          dann gibt es kein Problem mehr.

          Warum ich nicht normale Database benutze! Es liegt darin, dass mein Professor hasst MySQL :P. Er will lieber txt oder Json Dateien haben

          MfG
          Danke für Hilfe!!!
          Zuletzt geändert von wahsaga; 04.07.2007, 20:19.

          Kommentar


          • #6
            Re: Re: Re: Re: preg_replace problem?

            Original geschrieben von mydictionary
            und dafür könnte man es so ändern dann: [...] dann gibt es kein Problem mehr.
            Oder so, wie's im Manual steht ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X