php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.07.2006, 18:43  
Neuer Benutzer
 
Registriert seit: 15.07.2006
Beiträge: 3
OnkelSauron
Standard 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
OnkelSauron ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.07.2006, 18:47  
Gast
 
Beiträge: n/a
Standard

In "Zeichenketten" ersetzt php $variablen.
Mach also einfach eine 'Zeichenkette' daraus.
 
Alt 15.07.2006, 18:52  
Neuer Benutzer
 
Registriert seit: 15.07.2006
Beiträge: 3
OnkelSauron
Standard

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
OnkelSauron ist offline  
Alt 15.07.2006, 19:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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
        )

)
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.