Ankündigung

Einklappen
Keine Ankündigung bisher.

Backreferenz bei preg_match_all ()

Einklappen

Neue Werbung 2019

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

  • Backreferenz bei preg_match_all ()

    Hallo Forum!

    Ich habe mal wieder ein reguläres Ausdrucksproblem. Ich habe folgenden PHPCode:
    PHP-Code:
    preg_match_all "!\{red_(\w+?) (.*)\}(.*)\{/red_\w+\}!sU" $inhalt $treffer PREG_SET_ORDER ); 
    Mit diesem Code möchte ich allen Text, der in das Schema {red_xyz xyz}xyz{/red_xyz} herausfiltern, also ein klassisches BBCode Beispiel. Funktionieren tut das soweit ganz gut. Ich wollte jetzt den hinteren regulären Ausdruck (\w+) durch eine Rückreferenz auf den ersten Teil ersetzen, da das Script mir sonst ja auch sowas wie {red_text xyz}xyz{/red_link} rausfiltert, was natürlich nicht gewünscht ist. Wenn ich jetzt $1 in meinen Code einfüge, also folgendermaßen, findet er gar nichts mehr.
    PHP-Code:
    preg_match_all "!\{red_(\w+?) (.*)\}(.*)\{/red_$1\}!sU" $inhalt $treffer PREG_SET_ORDER ); 
    Ich komme irgendwie nicht drauf, was der Fehler ist, wie ich die Funktion auch umschreibe.

    Vielen Dank schonmal,

    Gruß Andreas

  • #2
    In "Zeichenketten" ersetzt php $variablen.
    Mach also einfach eine 'Zeichenkette' daraus.

    Kommentar


    • #3
      Oh Mann das ist mir schon peinlich, dass ich das übersehen habe. Aber auch mit ersetzten Anführungszeichen funktioniert es komischerweise nicht:

      PHP-Code:
      preg_match_all '!\{red_(\w+?) (.*)\}(.*)\{/red_$1\}!sU' $inhalt $treffer PREG_SET_ORDER ); 
      Trotzdem danke

      Gruß Andreas

      Kommentar


      • #4
        Herzlich Willkommen im Forum

        PHP-Code:
        <?php
        $inhalt 
        = <<<EOT
        {red_xyz abc}treffer{/red_xyz}
        {red_xyz abc}hoffentlich kein treffer{/red_link}
        EOT;

        header('Content-type: text/plain');
        print_r(preg_match_all '!\{red_(\w+?) (.*)\}(.*)\{/red_\\1\}!sU' $inhalt $treffer PREG_SET_ORDER ));
        print_r($treffer);
        ?>
        Code:
        1Array
        (
            [0] => Array
                (
                    [0] => {red_xyz abc}treffer{/red_xyz}
                    [1] => xyz
                    [2] => abc
                    [3] => treffer
                )
        
        )

        Kommentar

        Lädt...
        X