Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PCRE: Hilfe gesucht (https://www.delphipraxis.net/49301-pcre-hilfe-gesucht.html)

alcaeus 8. Jul 2005 16:19


PCRE: Hilfe gesucht
 
Hallo ihr,

ich scheitere langsam an einer regulaeren Expression. Zur Zeit sieht sie so aus:
Code:
$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', $something, $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:
$code = preg_replace('#(^<!-- IF )\{([a-z0-9\-_]*?)\}#is', $something, $code);
hat leider nicht geklappt. weiss jemand vielleicht, wie ich die Expression aufbauen muss, damit das:
Code:
slkdjfsf {SOMEVAR} asdfjk
zwar ersetzt wird, das hier:
Code:
klsdjfa aslfkj
aber nicht?
Irgendwie scheitere ich immer an diesen Expressions :wall:

Greetz
alcaeus

Dax 8. Jul 2005 16:22

Re: PCRE: Hilfe gesucht
 
Ich würde das hier vorschlagen:
Code:
$code = preg_replace('#^(<!-- IF )\{([a-z0-9\-_]*?)\}#is', $something, $code);
Gehts denn so? :duck:

alcaeus 8. Jul 2005 16:29

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:
$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "\$this->_tpldata['.'][0]['\\1']", $code);
Auf alle Faelle wird bei deiner Loesung leider auch das "<!-- IF " als Match erkannt und deshalb verwendet :(
Hast du vielleicht sonst noch irgendwelche Vorschlaege? :gruebel:

Greetz
alcaeus

jfheins 8. Jul 2005 16:35

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:

Dax 8. Jul 2005 16:36

Re: PCRE: Hilfe gesucht
 
Dann kann ich nur mit if() dienen:
Code:
if(preg_match("#", $code)

alcaeus 8. Jul 2005 16:39

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

jfheins 8. Jul 2005 16:49

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:
somevar:23,45,87,132
someother:35,75,231
also erst die variablennamen und dahinter ihre zu ersetzenden Positionen im Text.
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 ...

Christian S. 8. Jul 2005 16:55

Re: PCRE: Hilfe gesucht
 
Hallo!

So geht es bei mir:
Code:
<?php

$text = "blah blah";

$text = preg_replace('##is', 'BAR', $text);

echo $text;

?>
Man muss ein bisschen aufpassen, weil man duch das IF auch ein Leerzeichen mit hinein bekommt.

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 ;-)

jfheins 8. Jul 2005 17:12

Re: PCRE: Hilfe gesucht
 
So wie ich das sehe, ist das genau falschrum ^^

raus kommt:
Code:
blah <!-- IF BAR blah
bla {FOO} bla2
Ich diagnostiziere: {0} als "darf nicht da sein" funktioniert nicht. ;)

Christian S. 8. Jul 2005 17:15

Re: PCRE: Hilfe gesucht
 
Hi!

ich gehe mal von diesem "Auftrag" aus ;-)

Zitat:

Zitat von alcaeus
weiss jemand vielleicht, wie ich die Expression aufbauen muss, damit das:
Code:
slkdjfsf {SOMEVAR} asdfjk
zwar ersetzt wird, das hier:
Code:
klsdjfa aslfkj
aber nicht?

Das macht doch mein obiges Beispiel oder habe ich das Wochenende wirklich so dringend nötig? :gruebel:

Grüße
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 2  1 2      

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