PCRE: Hilfe gesucht
Hallo ihr,
ich scheitere langsam an einer regulaeren Expression. Zur Zeit sieht sie so aus:
Code:
Damit werden in der Template-Engine vom phpBB die Variablen ("{SOMEVAR}") ersetzt. Nachdem ich zur Zeit versuche, If-Bloecke einzubauen und dort auch solche Variablen erlaubt sein sollen, duerfen sie nur ersetzt werden, wenn kein "<!-- IF" direkt davorsteht. Das hier:
$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', $something, $code);
Code:
hat leider nicht geklappt. weiss jemand vielleicht, wie ich die Expression aufbauen muss, damit das:
$code = preg_replace('#(^<!-- IF )\{([a-z0-9\-_]*?)\}#is', $something, $code);
Code:
zwar ersetzt wird, das hier:
slkdjfsf {SOMEVAR} asdfjk
Code:
aber nicht?
klsdjfa aslfkj
Irgendwie scheitere ich immer an diesen Expressions :wall: Greetz alcaeus |
Re: PCRE: Hilfe gesucht
Ich würde das hier vorschlagen:
Code:
Gehts denn so? :duck:
$code = preg_replace('#^(<!-- IF )\{([a-z0-9\-_]*?)\}#is', $something, $code);
|
Re: PCRE: Hilfe gesucht
Hallo Dax,
vielleicht liegt es auch nur daran, dass ich in diesem Fall nicht mehr \\1 verwenden darf, um mit dem Match zu arbeiten. Ich zeige mal die gesamte Zeile:
Code:
Auf alle Faelle wird bei deiner Loesung leider auch das "<!-- IF " als Match erkannt und deshalb verwendet :(
$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "\$this->_tpldata['.'][0]['\\1']", $code);
Hast du vielleicht sonst noch irgendwelche Vorschlaege? :gruebel: Greetz alcaeus |
Re: PCRE: Hilfe gesucht
Naja ...
du könntest natürlich auch den Template-Text durchgehen, und dann immer nur alles ausserhalb der Kommmentare durch die Ersetzung schicken, aber das dürfte nicht allzu schnell sein ... Oder aber du verwendest einfach andere Klammern für die If-Abfrage :mrgreen: |
Re: PCRE: Hilfe gesucht
Dann kann ich nur mit if() dienen:
Code:
if(preg_match("#", $code)
|
Re: PCRE: Hilfe gesucht
@Julius: das hab ich schon mal probiert. Auch wenn die Templates gecached werden, das Cachen dauert mehr als 30 Sekunden wenn ich das in jeder Zeile mache :wall:
In $code steht eben der gesamte Text der Template-Datei drin, und es waere eben schoen, wenn ich das in der gleichen Expression machen koennte. Egal, ich zwinge mich jetzt mal durch die PCRE-Doku, jetzt habt ihr eine Weile Ruhe :lol: Greetz alcaeus |
Re: PCRE: Hilfe gesucht
Hmmm ... joa, 30 sek. sind nicht so gut ... :mrgreen:
Du könntest vielleicht so als speedup folgendes machen: Wenn keine speedup (oder wie auch immer) -Datei existiert: Templatetext aufwändig durchsuchen, und eine speedup (oder wie auch immer) -Datei anlegen, in der dann steht:
Code:
also erst die variablennamen und dahinter ihre zu ersetzenden Positionen im Text.
somevar:23,45,87,132
someother:35,75,231 Du musst also dann nicht mehr jedesmal alle Variablen mit preg_replace oder so ersetzen, sondern du öffnest diese speedup-Datei und ersetzt gezielt die notierten Vorkommen. Damit dürfte das ersetzen erheblich schneller gehen (zumindest ab dem 2. mal) und du kannst dich auf deine If-Abfragen konzentrieren ;) Da ein Template ja nicht ständig gewechselt wird, dürfte das ja insgesamt nicht allzuviel Zeit kosten ... |
Re: PCRE: Hilfe gesucht
Hallo!
So geht es bei mir:
Code:
Man muss ein bisschen aufpassen, weil man duch das IF auch ein Leerzeichen mit hinein bekommt.
<?php
$text = "blah blah"; $text = preg_replace('##is', 'BAR', $text); echo $text; ?> Grüße Christian //Edit: Okay, das mit dem Leerzeichen war bei obigen Codes auch in Ordnung. Hatte mich verguckt. ;-) //Edit2: Ist nicht exakt die selbe Ersetzung wie gewünscht, aber wenn ich den Kommentar nicht mit ersetzte, war es so unbequem zu gucken, ob richtig ersetzt wurde :-) Anpassung sollte nicht schwer sein ;-) |
Re: PCRE: Hilfe gesucht
So wie ich das sehe, ist das genau falschrum ^^
raus kommt:
Code:
Ich diagnostiziere: {0} als "darf nicht da sein" funktioniert nicht. ;)
blah <!-- IF BAR blah
bla {FOO} bla2 |
Re: PCRE: Hilfe gesucht
Hi!
ich gehe mal von diesem "Auftrag" aus ;-) Zitat:
Grüße Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz