Du bist nicht angemeldet.

#1 17.04.2005 15:05:09

Schulteatq
Mitglied

PCRE Modifier /e und Klassen

hmm - ich bastel grad an einem Template System für mein CMS. Doch jetzt bin ich irgendwie auch ein komisches Problem gekommen.
preg_replace kennt ja bekanntlichermaßen den Modifier /e mit dem der replacement string als PHP interpretiert wird. Das funktioniert auch wunderbar solange ich globale Funktionen aufrufen möchte. Will ich eine Kindprozedur einer Klasse aufrufen oder eine Prozedur der eigenen Klasse ($this) funktioniert das ganze nicht mehr.

Hier ein Beispiel:

$code = preg_replace("#(^|\s)(\\$)([^\\$\s]*?)(\\$)(^|\s)#ise", "'\\1' . parse_vars('\\3') . '\\5'", $code);

diese Variante funktionert wunderbar und liefert korrekte Ergebnisse.

Wähle ich ich diese Variante:

$code = preg_replace("#(^|\s)(\\$)([^\\$\s]*?)(\\$)(^|\s)#ise", "'\\1' . $this->parse_vars('\\3') . '\\5'", $code);

oder diese:

$code = preg_replace("#(^|\s)(\\$)([^\\$\s]*?)(\\$)(^|\s)#ise", "'\\1' . $template->parse_vars('\\3') . '\\5'", $code);

wird keine Funktion aufgerufen sondern nur das Äquivalent zu \\1\\3\\5 zurückgegeben.

php.net hat mir leider keine passende Antwort gebracht. Ich nutze PHP 4. Vielleicht weiß ja einer (Pierre? wink ) Rat...

Beitrag geändert von Pierre (17.04.2005 15:28:55)

Offline

#2 17.04.2005 15:18:41

Pierre
Entwickler

Re: PCRE Modifier /e und Klassen

Versuche es so:

$code = preg_replace("#(^|\s)(\\$)([^\\$\s]*?)(\\$)(^|\s)#ise", '\'$1\' . $this->parse_vars(\'$3\') . \'$5\'', $code);

Kurz: Du mußt ' statt " nehmen, da PHP den String sonst vor dem Match interpretiert.

Offline

#3 17.04.2005 15:37:17

Schulteatq
Mitglied

Re: PCRE Modifier /e und Klassen

ach ich depp - da hätte ich aber auch von selbst drauf können kommen ^^
alternativ kann man natürlich auch das $ escapen. Und ich hab mich auch noch gewundert, warum das Syntax Highlighting so komisch aussah... Manchmal sieht man die Wald vor lauter Bäumen nicht. Die regulären Ausdücke sind aber auch manchmal wirklich kryptisch... ^^

thx

Offline

#4 17.04.2005 15:46:23

Pierre
Entwickler

Re: PCRE Modifier /e und Klassen

Momentan arbeite ich an einer schlimmeren Konstruktion...aber irgendwann bekommt man einen Blick dafür und sieht nicht nur mehr Salat wink

Übrigens: Wenn Du eine Klammerung mit ?:, also (?:blah) beginnst, so wird die nicht in eine Variable gespeichert.

Offline

#5 17.04.2005 17:00:07

Schulteatq
Mitglied

Re: PCRE Modifier /e und Klassen

ah interessant - das kannte ich noch nicht.
Dass ich da 5 Klammerungen gemacht hab, kommt noch ausm Debuggen. Damit ich den Fehler finde hab ich halt den Ausdruck Stück für Stück auseinander genommen...

Ja, mit der Zeit gewöhne ich mich auch daran. Ich hab mal diverse kleine Scripts geschrieben, die Informationen aus Internetseiten parsen und die dann ausgeben. z.B. Google News, di.fm, uvm. Das übt ungemein. ^^

http://www.cszb.net/index.php?id=12

Offline

#6 17.04.2005 17:18:12

Pierre
Entwickler

Re: PCRE Modifier /e und Klassen

Momentan arbeite ich am Text-Parser für das neue Forum (siehe auch hier:<a href="thread.php?thread=3900;post=last;id=0">http://www.laber-land.de/thread.php?t...=last;id=0</a>). Das sieht nach nichts aus, aber der Code dahinter ist die Hölle...vor allem der zum SyntaxHighlightning.

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums