Webstatt.org - Community seit 2006 - 2012 (2024?)

preg replace - paramter auslesen

Avatar user-236
10.05.2007 11:48

Hi.

Möchte Folgendes mit preg_replace bzw. regex umsetzen.

{tpl name="test"}Irgendwas{/tpl}.

1. den Wert aus dem Attribut name auslesen (test)
2. den Wert zwischen {tpl.... } {/tpl} auslesen.

Hat mir jemand ne Funktion? Möchte eigentlich XML Parser etc. vermeiden und die Funktion möglichst klein halten

Danke und Gruß,
mab

signature in progress
Avatar user-162
10.05.2007 11:53

das sollte funktionieren... ($1 ist der Wert des Attributes $2 dann der Wert dazwischen)

$pattern = "/{tpl name="([^"]+)"}([^{]+){\/tpl}/";

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-236
10.05.2007 12:43

danke, das hat aber leider einen fehler erzeugt.
habs nun erst mal so gemacht:


preg_match("/{tpl name=\"(.*?)\"}(.*?){\/tpl}/", "hallo {tpl name=\"test\"}asd{/tpl}", $string);




wenn ich jetzt das pattern auf folgenden string anwende:

$string = " viel text {tpl ...} test {/tpl} ";

ist es jetzt auch möglich das pattern aus $string zu entfernen? mit str_replace würde das natürlich gehen, aber geht das auch gleich mit preg_match`?

----------------------
EDIT: okay, das hab ich jetzt erst mal gelöst. regex nervt schon wieder. lächeln ich möchte die zeichenkette nur matchen wenn am Anfang kein { steht und am Ende kein }

praktisch: [^{] (.*?) [^}]

hat mir jemand auf Anhieb ne Lösung?

signature in progress
Avatar user-271
11.05.2007 11:01

klar erzeugt das einen fehler.......wiel {} sonderzeichen sind

/\{tpl name=\"(.*?)\"\}(.*?)\{\/tpl\}/is


der sollte funktionieren zwinkern

mit preg_macht kannst du nicht entfernen...entweder über preg_replace...oder du matcht es mit preg_match_all und entfernst es dann über ein str_replace zwinkern

mhh...

#!/bin/bash
traurig){ neutral:& };:
Avatar user-236
11.05.2007 19:08

danke, aber is eigentlich schon klar, dass ersetzen nur mit preg_replace geht lächeln
sehr seltsam, mit [^] läuft es jetzt. der fehler lag irgendwie am string selbst.

vg,
mab

signature in progress