php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen : RegEx-Pattern soll auf erstes Vorkommen reagieren


Denis84
01-10-2008, 21:38
Hallo,

der Betreff ist etwas unglücklich gewählt, aber ich weiß nicht, wie ich die Anforderung besser hätte beschreiben sollen.

Ich habe eine Template-Klasse, bei der vor der Ausgabe eines Templates alle ungenutzten Marker (in der Form {MARKER}) entfernt werden sollen.

Im Template könnte z.B. stehen:

<li{NAV_CLASS}><a href="{CMS_URL}/impressum/">Test</a></li>

Ich versuche das Ganze folgendermaßen:

$this->template = preg_replace('/\{(.*)\}/', '', $this->template);

In $this->template steht ausschließlich HTML-Code.

Ich dachte bisher, dass das einwandfrei funktioniert. Aber wenn eben dieser Fall eintritt, dass zwei Marker in einer Zeile stehen, dann wird daraus folgendes:

<li/impressum/">Test</a></li>

Vom ersten "{" bis zum letzten "}" entfernt. Allerdings nur zeilenweise. Über neue Zeilen erstreckt sich dieses Verhalten nicht.

Stattdessen soll logischerweise nur bis zum ersten Vorkommen von "}" entfernt werden.

Hat jemand eine Idee?

TBT
01-10-2008, 21:48
$this->template = preg_replace('/{.*}/U', '', $this->template);

oder

$this->template = preg_replace('/{[^}]*}/', '', $this->template);

jmc
01-10-2008, 23:24
Mit .*? statt .* funktioniert es auch. Schlag doch einmal greedy/ungreedy nach. die {} müssen natürlich noch ein Escapezeichen davor haben, aber ich denke einmal das wurde vom Forum geschluckt.

Denis84
02-10-2008, 12:19
Mit U hat es geklappt, danke!

"{" und "}" habe ich in der Tat nicht escaped, bisher scheint es trotzdem zu funktionieren. Werd es dennoch später mal einbauen.

H2O
02-10-2008, 14:35
Original geschrieben von jmc
die {} müssen natürlich noch ein Escapezeichen davor haben Warum :confused:

--

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:51 Uhr.