[REGEX] kleine frage zu preg_quote

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

  • [REGEX] kleine frage zu preg_quote

    hallo zusammen,

    ich benutze folgende regex aus der php-faq
    um außerhalb von html-tags nach ausdrücken $word zu suchen.

    PHP-Code:
    preg_replace("/((<[^>]*)|$word)/e"'"\2"=="\1"? "\1":"$replace"'$text); 
    mein replace-string ist eine php-funktion:
    PHP-Code:
    <?php echo getToolTip("europa",$_REQUEST['L']); ?>
    damit preg_replace das auch alles ordentlich interpretiert,
    habe ich ein
    PHP-Code:
    $replace preg_quote($replace); 

    leider bekomm ich als ergebnis des preg_replace-aufrufes
    einen string, der noch immer die maskierten
    regex-ausdrücke enthält:

    <\?php echo getToolTip\("europa",\$_REQUEST\['L'\]\); \?\>
    weiß jmd, wie ich das verhindern kann?
    also dass preg_replace meinen $replace-string nicht als
    php interpretiert, aber dennoch keinen parse-fehler ausgibt,
    weil $replace kein ordentlicher t-string ist?

    wenn ich preg_quote() weglasse, bekomm ich halt parse-errors!

    danke schonmal für eure hilfe,
    grüße
    tim

  • #2
    Re: [REGEX] kleine frage zu preg_quote

    Warum willst du auf dein Replace preg_quote anwenden ...? Das brauchst du doch nur für deinen Suchstring.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      also mein $replace ist der string, der anstelle
      des suchwortes eingefügt werden soll.

      dieser string ist die php-funktion,
      die aber auch regex-ausdrücke enthält.

      deswegen preg_quote(), oder?

      falscher weg?

      grüße
      tim

      Kommentar


      • #4
        hat niemand ein tip?

        ich bin so in zeitdruck, sorry.

        Kommentar


        • #5
          Original geschrieben von tok
          ich bin so in zeitdruck, sorry.
          das interessiert hier keinen!

          http://learn.to/cooldown
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Falls Dir das weiterhilft:

            der folgende Ausfruck ersetzt z.B. "h" durch Deinen replace-String:

            $result = preg_replace('/h/', "<?php echo getToolTip(\"europa\",$_REQUEST['L']); ?>", $subject);

            habs getestet und funktioniert so weit

            Kommentar


            • #7
              Hab jetzt mal das Ganze nachgebaut:

              Dieser Ausdruck:

              $result = preg_replace('/((<[^>]*)|$word)/', "\"2\"==\"1\"? \"1\":\"<?php echo getToolTip(\"europa\",$_REQUEST['L']); ?>\"\r\n", $subject);

              auf das hier angewandt:

              hallo <br>

              liefert folgendes:

              hallo "2"=="1"? "1":"<?php echo getToolTip("europa",$_REQUEST['L']); ?>"
              >

              Kommentar


              • #8
                danke koala,
                leider ist mein ausdruck ein wenig komplizierter,
                da noch php-code interpretiert werden muss.

                siehe modifier /e und die '? :'-abfrage im callback...
                quote
                deswegen hatte ich dann preg_quote($replace)
                genommen, um die interpretieren der string-variable $replace
                zu verhindern.

                mit dem ergebnis, dass er die maskierten zeichen
                inkl. '\' in meinen text schreibt...

                hast du vielleicht noch ne idee?

                Kommentar


                • #9
                  du denkst der ausdruck ist falsch?
                  ich will außerhalb von html-tags suchen und ersetzen !

                  ich den ausdruck aus der php-faq und er funktioniert mit "normalen"
                  strings, nur leider nicht mit strings, in denen regex-ausdrücke wie $ stehen...

                  ich probier hier schon die ganze zeit rum.

                  danke für deine mühen :-)

                  Kommentar


                  • #10
                    "du denkst der Ausdruck ist falsch?"


                    ?????

                    hab ich das behauptet?

                    Hast wohl was verwechselt. In welchem Forum turnst denn rum?

                    Kommentar


                    • #11
                      nee,
                      auf das hier angewandt:

                      hallo <br>

                      liefert folgendes:

                      hallo "2"=="1"? "1":"<?php echo getToolTip("europa",$_REQUEST['L']); ?>"
                      hab den punkt nicht verstanden.

                      $text = "hallo <br>";

                      und ergebnis nach preg_replace(...)
                      hallo "2"=="1"? "1":"<?php echo getToolTip("europa",$_REQUEST['L']); ?>"

                      Kommentar


                      • #12
                        so - habs jetzt noch mal mit nem String umgebaut:

                        $result = preg_replace('/((<[^>]*)|$word)/', "\"2\"==\"1\"? \"1\":\"$replace\"\r\n", $subject);

                        mit:

                        hallo <br>

                        ergibt:

                        hallo "2"=="1"? "1":"$replace"
                        >

                        *******************

                        Schreib doch mal einen Ursprungsstring und wie er hinterher aussehn soll bitte.

                        Das php-Script soll zwischen zwei Tags eingefügt werden?
                        Zuletzt geändert von Koala; 28.01.2006, 19:59.

                        Kommentar


                        • #13
                          also ursprungsstring ist reiner text mit gelegentlichen
                          html-formatierungen: <strong>... <div>... usw.
                          also eigentlich alles, was zwischen <body> ... </body>
                          stehen kann.

                          in diesem string suche ich nach einem einzigen wort, wie z.b. "lingua"

                          dieses wort soll dann zu einer php-funktion werden:
                          PHP-Code:
                          <?php echo getToolTip("lingua",$_REQUEST['L']); ?>
                          das ganze dient einer tooltip-funktion.
                          getToolTip liefert einen a-tag mit javascript - aufrufen...aber das
                          ist ja erstmal egal.

                          bei deinem regex-asdruck fehlt dasd /e, denn er soll ja nachher
                          den replace-string als php interpretieren und je nach sachlage (?
                          entweder meinen $replace-string einfügen, oder halt nicht.

                          hmm... ich weiß auch nicht

                          Kommentar


                          • #14
                            Ich hab mir jetzt die Seite angeschaut, wo das beschrieben ist in den FAQs:

                            Damit der abgedruckte Source funktioniert muß bei dem php-String das ">" nachträglich angefügt werden, weil sonst falsch interpretiert wird. Außerdem wurde im Ersetzstring das Dollarzeichen und die Anführungszeichen escaped.

                            Hier der Source ("Bernd" wird druch den Tooltip-String ersetzt):

                            PHP-Code:
                            <?php

                            $t 
                            "<br>Bernd</br>";
                            $s "Bernd";

                            $r "<?php echo getToolTip(\"europa\",\$_REQUEST['L']); ?";
                            $r .= ">";

                            echo 
                            preg_replace("/((<[^>]*)|$s)/e"'"\2"=="\1"? "\1":"$r"'$t);

                            ?>
                            Zuletzt geändert von Koala; 28.01.2006, 20:46.

                            Kommentar


                            • #15
                              also,
                              ich kanns mir nicht erklären:

                              sobald ich den ganzen kram aus meiner klasse
                              zu testzwekcen in eine einfache php-datei
                              packe, funktioniert alles wunderbar.

                              wenn ich es per funktionsaufruf aus meiner klasse mache,
                              gehts nicht und ich bekomm einen parse-error!

                              was ist denn das bloß?

                              das ganze passiert auch nur, wenn ich bei dem
                              link bei meinem replace-string,
                              der ja eigentlich nur eine php-funktion ist, in
                              dieser funktion als zweiten parameter $_REQUEST['L']
                              einbaue.

                              mit maskierung hab ichs auch schn probiert, geht nicht.


                              für zündende ideen 1000dank.

                              grüße
                              tim

                              Kommentar

                              Lädt...
                              X