Dornii: preg_replace

Jetz erfahr ich doch grad, dass man eregi_replace() nicht mehr hernehmen soll, und deswegen hab ich versucht meine schöne, funktionierende eregi_replace()-Funktion durch diese zu ersetzen:

$zeile = preg_replace ("(define/('$schluessel[$z]', ')(.*)('/);)","\1$werte[$z]\3",$zeile);

Leider geht das nicht. Fehlermeldung gibts zwar keine, aber er ersetzt nichts. Liegts vielleicht an der Groß-Kleinschreibung? Was für eine preg-Funktion brauche ich, damit Groß-Kleinschreibung ignoriert wird?
Gibts irgendwo ne Seite wo das schön leicht verständlich auf deutsch erklärt wird? Auch mit den Platzhaltern und Sonderzeichen und so?

  1. hi,

    Liegts vielleicht an der Groß-Kleinschreibung? Was für eine preg-Funktion brauche ich, damit Groß-Kleinschreibung ignoriert wird?

    dafür brauchst du den modifier i in deinem pattern.

    i (PCRE_CASELESS)
    If this modifier is set, letters in the pattern match both upper and lower case letters.

    Gibts irgendwo ne Seite wo das schön leicht verständlich auf deutsch erklärt wird? Auch mit den Platzhaltern und Sonderzeichen und so?

    für den anfang lies dir mal http://www.php.net/manual/de/ref.pcre.php durch.

    gruss,
    wahsaga

    1. hi,

      der Link hilft mir nicht wirklich weiter. :-(
      Ich schätze, es liegt an den Klammern (), und das er das Suchmuster nicht findet. In der alten eregi_replace-Fucktion hat man einfach sowas [] rumgemacht, und dann hats gepasst, aber das geht ja hier nicht.
      Wie kann ich den die scheiß Klammern so kennzeichnen, dass er sie als Text interpretiert? Oder liegts doch nicht an dem??

      1. Hi,
        dir fehlt glaube ich ein delimiter oder?
        /...pattern.../ und wenn du den delimiter dann im patter benutzt mus der mit backslash gekennzeichnet weden /.
        Uli

        1. dir fehlt glaube ich ein delimiter oder?
          /...pattern.../ und wenn du den delimiter dann im patter benutzt mus der mit backslash gekennzeichnet weden /.

          Sorry, schnall ich nicht. Habs so probiert:

          $zeile = preg_replace ("/(define('$schluessel[$z]', ')(.*)(');)/i","\1$werte[$z]\3",$zeile);

          Dabei bringt er diese Fehlermeldung:

          Warning: Delimiter must not be alphanumeric or backslash in c:\apache\htdocs\test\test.php on line 23

          Lass ich die backslash im pattern weg macht er gar nix, wie gehabt.

          Was ist falsch?

          1. hi,

            Warning: Delimiter must not be alphanumeric or backslash in c:\apache\htdocs\test\test.php on line 23

            der backslash darf nicht als delimiter eingesetzt werden, genau das machst du aber.

            Lass ich die backslash im pattern weg macht er gar nix, wie gehabt.

            wenn _dein_ delimiter nicht erlaubt ist, heisst das doch wohl noch lange nicht, dass du den delimiter _ganz weglassen_ sollst, oder?

            nimm halt einen anderen, wie z.b. !

            gruss,
            wahsaga

            1. Sorry, ich bin da zu dusselig dafür:

              $zeile = preg_replace ("!(define('$schluessel[$z]', ')(.*)(');)!","\1$werte[$z]\3",$zeile);

              Wie läuft`n das mit den Delimitern? Kann ich den ganzen Pattern als einen Delimiter festlegen? So wie oben? Oder was mach ich verkehrt? Er gibt nähmlich nach wie vor das ganze ohne Änderung zurück. Wenn er Groß-Kleinschreibung ignorieren soll, kann ich das dann so machen:

              $zeile = preg_replace ("!(define('$schluessel[$z]', ')(.*)(');)!i","\1$werte[$z]\3",$zeile);

              ?

              1. hi,

                Wie läuft`n das mit den Delimitern? Kann ich den ganzen Pattern als einen Delimiter festlegen?

                vielleicht möchtest du dich jetzt noch mal ein wenig eingehender mit dem link, den ich dir genannt habe, beschäftigen ...

                gruss,
                wahsaga

                1. vielleicht möchtest du dich jetzt noch mal ein wenig eingehender mit dem link, den ich dir genannt habe, beschäftigen ...

                  boäh. Da muss ich erst mal mein Wörterbuch raussuchen. Und ob ich das dann versteh. Mit der fertigen Lösung wird das wohl nix mehr...

                2. Laut meinen Bemühungen der Recherche müsste diese Zeile vollkommen richtig sein,

                  $zeile = preg_replace ("/(define('$schluessel[$z]', ')(.*)(');)/i","\1$werte[$z]\3",$zeile);

                  aber es erfolgen einfach keine Änderungen. Und es kann nur an dieser Zeile hapern.

                  Mal sehen, vielleicht find ich mit Yoga oder so doch noch die Erleuchtung...

                  1. Hallo Dornii,

                    Mal sehen, vielleicht find ich mit Yoga oder so doch noch die Erleuchtung...

                    probier's einfach mal, da das wilde Probieren Dir wohl eh besser liegt, als das methodische Vorgehen...

                    Ich weiß auch nicht, ob man da einfach so eine Funktion bzw. dieses define-Konstrukt verwenden kann. Beschreib doch mal, was Dein Ausdruck eigentlich machen soll und ob Du überhaupt reguläre Ausdrücke kennst.

                    Gruß, Andreas

                    --
                    <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                    http://was-ist-das.andreas-lindig.de
                    1. Servus,

                      Ich habe eine Datei konstanten.php, in der stehen diese Konstante:

                      define('NAME', 'Meinname');
                      define('VORNAME', 'Meinvorname');
                      define('STRASSE', 'Meine Strasse');
                      ...

                      Und jetzt will ich eine Edit-Webseite haben, mit der man die Werte der Konstanten ändern kann.

                      define('NAME', ' -> (define('$schluessel[$z]', ')  Suchmuster 1,

                      Meinname -> (.*)  Suchmuster 2,

                      '); -> (');)  Suchmuster 3.

                      Suchmuster 2 soll durch das hier $werte[$z] ersetzt werden.

                      Mit der alten eregi_replace()-Funktion hat auch schon alles Funktioniert. Aber es sollte eben jetzt mit preg hinhauen. Und ich muss gestehen, dass ich mich nicht soo toll damit auskenne. Aber deswegen frag ich ja hier.