Tobias Kloth: Reguläre Ausdrücke...

Beitrag lesen

Hallo Sebastian,

<nixtag></nixtag><tag1><tag2>blablabla</tag2><tag3>blablabla</tag3></tag1><tag1>....</tag1>

das ist ggf. eher was für einen xml-Parser ...

Wie muss der dazugehörige reguläre Ausdruck aussehen:

versuch es mal mit:
 "~<tag1>.*</tag1>~U"
eine Klammerung brauchst du eigenltich nicht, da php den Gesammttreffer sowieso speichert.

Mein erster Ansatz sah folgendermaßen aus: "/<tag1>([^(tag1)].*)</tag1>/"

Was willst du denn mit ([^(tag1)].*) bezwecken? Dein Ausdruck sucht das was zwischen <tag1> und </tag1> steht und was nicht mit einem der Zeichen aus der Zeichenmenge »()tag1« anfängt und von beliebigen Zeichen (außer Zeilenumbrüchen) gefolgt wird. Auf deine obengenannte Zeichenkette trifft das zwar zu (das erste Zeichen nach <tag1> ist ein <) - aber wenn du vor <tag2> z.B. ein »t« schreibst, wird der erste <tag1>-Block nicht mehr gefunden. Ich glaube nicht, dass das das ist, was du willst :-)
Noch ein Tipp: als Delimiter kannst du auch andere Zeichen als / verwenden - dann musst du das / von </tag1> nicht maskieren.

array[0] = <tag1><tag2>blablabla</tag2><tag3>blablabla</tag3></tag1><tag1>....</tag1>

der Punkt ist zu http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#gierig_genuegsam@title=gierig ist - setzt mal hinter den Stern ein Fragezeichen oder ganz ans Ende (hinter das abschließende /) ein »U«.

Grüße aus Nürnberg
Tobias [der hofft, dass das jetzt nicht allzu unverständlich war ...]