preg_replace und Funktionen

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

  • preg_replace und Funktionen

    Hi! Wieder mal die rekursiven:

    Ich lasse einen String nach dem Vorhandensein von "{cp:rdfinput}irgendwas{/cp:rdfinput}" durchsuchen. "irgendwas" soll dann an die Funktion newsrdf("irgendwas") übergeben werden.

    Der erste Teil funktioniert auch damit:

    $text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/i",newsrdf(\\1),$text);

    Nur ist das Problem, dass er den Inhalt nicht an die Funktion übergeben will. Immer diese Fehlermeldung:

    "Warning: fopen("1","r") - No such file or directory in functions.php..."

    D.h. dass anscheinend nur \\1 übergeben wird und nicht der String. Wie kann ich dies ändern???
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

  • #2
    keine Ideen? oder seid ihr alle bei der wahl???
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

    Kommentar


    • #3
      ich darf nicht wählen <--- ausländer, lol
      muss nicht der ganze suchstring in kaskadiert in klammern stehen ?
      meine Projekte bestaunen: http://www.kleiza.de

      Kommentar


      • #4
        Wie meinen? Steht ja alles in Klammern, und mit kaskadierten habe ich das noch nicht gesehen. Aber das ganze wird ja wie gewünscht ausgeben, nur nicht an die Funktion übertragen.

        Da ich aber diese Routine mehrmals verwende in einem String, muss die Funktion innerhalb von preg_replace aufgerufen werden. Ich kann nicht das Ergebnis von preg_replace in einer Variable speichern und dann erst durch die Funktion laufen lassen.
        Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
        www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
        [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

        Kommentar


        • #5
          An die RegEx modifikator 'e' anhängen und die Funktionnamen als string übergeben:
          PHP-Code:
          $text preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf(\\1)',$text); 
          "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

          Kommentar


          • #6
            Funktioniert so leider nicht. Ich dachte erst das geht nicht, weil vor dem "/cp:rdfinput" und dem "\1" noch jeweils ein "\" fehlt. Aber dennoch wird mir z.B. bei dem Newsfeed von http://www.phpcenter.de/backend/phpcenter.rss ein Fehler ausgegeben:

            Fatal error: Failed evaluating code: newsrdf(http://www.phpcenter.de/backend/phpcenter.rss) in functions.php on line 56

            Also:

            $text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf(\\1)',$text);

            gibt mir nur die URL aus.
            Zuletzt geändert von hottemp; 22.09.2002, 16:35.
            Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
            www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
            [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

            Kommentar


            • #7
              Ach ja, das Argument für newsrdf() muss dann natürlich in Quotes gesetzt, da ja zuerst der Wert der ersten Backreference eingesetzt wird und DANN der Code eval'ed wird.
              Also so:
              PHP-Code:
              $text preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf("\\1")',$text
              "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

              Kommentar


              • #8
                Update: Hab es nochmal probiert mit

                $text = preg_replace("/{cp:rdfinput}(.*){\/cp:rdfinput}/ie",'newsrdf("\\1")',$text);

                Die Funktioniert, ich bekomm die News auf die Seite, allerdings nur wenn das ganze per echo innerhalb der Funktion ausgeben wird. Dann steht alles oben links auf der Seite, also direkt am Anfang des Quellcodes. Alternativen?
                Zuletzt geändert von hottemp; 23.09.2002, 14:10.
                Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
                www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
                [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

                Kommentar


                • #9
                  vertausche mal ' und " in deinem Ausdruck,
                  bei mir funzt folgendes einwandfrei:
                  PHP-Code:
                  $text=preg_replace("/&lt;(.*)&gt;/esiU","'<span id=cht>&lt;'.\$this->xcode_html_param('\\\\1').'&gt;</span>'",$text); 
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar

                  Lädt...
                  X