[REGEX] was wird ignoriert?

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

  • [REGEX] was wird ignoriert?

    Also ich hab ein regex, das er jedoch nicht annimmt, sondern einfach den ganzen String unverändert auspuckt...

    PHP-Code:
    $this->blocks[$name] = preg_replace("/(.*)<!-- BEGIN ".$name." -->(.*)<!-- END ".$name." -->(.*)/""\\2"$this->tpl); 
    irgendwas in dem needle muss er als ein Metazeichen oder so ansehen, so dass er das needle nicht findet.

    nur wo/was?
    tata
    moqui

    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

  • #2
    ok...dann mal andersrum

    schreibt mal jemand eine regex, die auf das Folgende passt (preg_replace() bitte KEIN ereg_replace()):

    Code:
    beliebiger Text
    
    <!-- BEGIN test -->
    
    beliebiger Text
    
    <!-- END test -->
    
    beliebiger Text
    das zwischen den BEGIN und END-Tags hätte ich gern als Resultat
    tata
    moqui

    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

    Kommentar


    • #3
      PHP-Code:
      $text='Text1
      <!-- BEGIN test -->Test<!-- END test -->
      Text2
      <!-- BEGIN test -->Noch ein Test<!-- END test -->
      Text3'
      ;
      echo 
      $text;
      echo 
      '<br />';
      echo 
      preg_replace('%<!-- BEGIN test -->(.*)<!-- END test -->%siU',
      '<span style="border:1px solid red;">\\1</span>',$text); 
      so?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        also es hat sich was getan, was es vorher net hat...

        mal vorerst danke...ich muss noch bisschen probieren, vielleicht liegts ja noch an meiner Klasse, aber ich muss schnell weg....
        tata
        moqui

        [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

        Kommentar


        • #5
          hmmm

          es sieht jetzt bei mir so aus:

          PHP-Code:
          preg_replace('%<!-- BEGIN '.$name.' -->(.*)<!-- END '.$name.' -->%siU'"\\1"$this->tpl); 
          aber er gibt mir den kompletten Eingabestring (also $this->tpl) zurück, nur ohne die END und BEGIN-Tags...

          aber das Ziel soll ja sein, dass ich nur den Text zwischen den Tags erhalte.
          tata
          moqui

          [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

          Kommentar


          • #6
            arbeite mal mit preg_match(). das dürfte ne besserung bringen..
            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


            • #7
              oder besser preg_match_all
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                jojo.... stimmt...
                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


                • #9
                  die funktion sieht dann im Klartext für euch wie aus?

                  Hab die Funktion noch nicht benutzt...ich gah mal testen....

                  EDIT:

                  Habs selber rausbekommen....hab bissle rumgespielt

                  Zuletzt geändert von Moqui; 13.07.2003, 21:04.
                  tata
                  moqui

                  [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

                  Kommentar


                  • #10
                    also ich hab mir jetzt nen workaround gebaut....tut auch so weit...

                    aber die Logik fehlt mir.

                    PHP-Code:

                    // aus
                    $this->blocks[$name] = preg_replace('%<!-- BEGIN '.$name.' -->(.*)<!-- END '.$name.' -->%siU'"\\1"$this->tpl);

                    // wurde
                    $check preg_match_all('%<!-- BEGIN '.$name.' -->(.*)<!-- END '.$name.' -->%siU'$this->tpl$array);
                    $this->blocks[$name] = $array[1][0];

                    // ^^ das tut soweit - kein Prob
                    // aber warum funktionierte das preg_replace() oben nicht, wenn
                    // wiederum das hier funktioniert?

                    $this->end_tpl preg_replace('%<!-- BEGIN '.$key.' -->(.*)<!-- END '.$key.' -->%siU'$val$this->end_tpl);

                    // ich denke es leigt am Backreferencing.... 
                    mein Problem ist gelöst, jedoch würde ich auch gern die Logik verstehen, die ich angewandt hab...also das Problem mit dem Backreferencing...das ist nämlich Funktionstechnisch der einzige Unterschied.
                    tata
                    moqui

                    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

                    Kommentar


                    • #11
                      Ihr könnt mich tot schlagen, aber ist da nicht die backreference falsch?
                      die muss doch "\\1" und nicht "\1" lauten
                      SQL Injection kitteh is...

                      Kommentar


                      • #12
                        preg replace ersetzt und liefert immer den ganzen string zurueck, deswegen würd ich immer preg_match nehmen um dinge herauszufiltern

                        allerdings

                        PHP-Code:
                        $result preg_replace("/.*<!-- BEGIN test -->(.*)<!-- END test -->.*/si","\$1",$this->tpl); 
                        müsste so funktionieren wie du es willst (löscht alles bis auf den text zwischen den tags und gibts zurück, wenn die tags allerdings mehrmals gesetzt sind immer nur den text zwischen den letzten tags)

                        ich würd dir raten bei preg_match zu bleiben

                        Edit: bleh tippfehler
                        Zuletzt geändert von vegu; 16.07.2003, 00:47.
                        vegu's scripts and gfx

                        Kommentar


                        • #13
                          naja, dass array was man bei preg match bekommt sind doch die backreferences, also kann man getrost auch backrefereces verwenden
                          SQL Injection kitteh is...

                          Kommentar


                          • #14
                            das eine \ kommt von dem Forum...
                            tata
                            moqui

                            [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

                            Kommentar

                            Lädt...
                            X