PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RegExp's: "Variablen" verwenden?



Firebird
16-11-2003, 12:03
Also... angenommen ich habe folgenden Text:


außerhalb von allem
$P,begin{hallo}
innerhalb von "hallo"
$P,begin{hallo1}
innerhalb von "hallo1" (was innerhalb von "hallo" ist)
$P,end{hallo1}
innerhalb von "hallo"
$P,begin{hallo2}
innerhalb von "hallo2" (was innerhalb von "hallo" ist)
$P,end{hallo2}
innerhalb von "hallo"
$P,end{hallo}
außerhalb von allem
$P,begin{blub}
innerhalb von "blub"
$P,end{blub}

Dann will ich folgendes Array haben:

$array['hallo']:
innerhalb von "hallo"
$P,begin{hallo1}
innerhalb von "hallo1" (was innerhalb von "hallo" ist)
$P,end{hallo1}
innerhalb von "hallo"
$P,begin{hallo2}
innerhalb von "hallo2" (was innerhalb von "hallo" ist)
$P,end{hallo2}
innerhalb von "hallo"
$array['blub']:
innerhalb von "blub"

Das Problem ist, wenn ich folgendes Pattern nehme:


#\$P,begin\{([\w|\d|_]*)\}([.|\n]*?)\$P,end\{([\w|\d|_]*)\}#si
(da sind bestimmt noch paar fehler drin gg aber is erstmal egal)

Dann bekomme ich folgendes Array:

$array['hallo']:
innerhalb von "hallo"
$P,begin{hallo1}
innerhalb von "hallo1" (was innerhalb von "hallo" ist)
$array['hallo2']:
innerhalb von "hallo2" (was innerhalb von "hallo" ist)
$array['blub']:
innerhalb von "blub"

Also wird (so wie es auch logisch is) einfach immer das nächste $P,end genommen, wobei komplett ignoriert wird das zwischendurch noch ein $P,begin kam.

Eine erste Möglichkeit wäre schonmal, irgendwie sicherzustellen, dass der Text innerhalb der Klammern ($P,begin{der_Text}) bei $P,begin genauso sein soll, wie bei $P,end - aber ich hab keine Ahnung, wie ich das da so einfach hinbekommen soll.

Noch besser wäre es natürlich, wenn ich es irgendwie so machen könnte, dass wenn zwischendurch $P,begin kommt, das nächste $P,end ignoriert wird (wenn zweimal $P,begin kommt wird dann halt zweimal $P,end ignoriert), aber wie das gehen soll weiß ich erst recht net.

Ich hab schon bei der Pattern Syntax auf PHP.net geguckt, aber keine Lösung gefunden - denke aber mal für die erste Möglichkeit gibt es bestimmt eine Lösung.