PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : regexp - verschachtelung



BLUESCREEN3D
11-05-2004, 18:19
angenommen ich habe einen regulären ausdruck, der ein anfangs- und ein endtag ersetzen soll, dann funzt das zwar alles, aber sobald ich die verschachtele geht es nicht mehr:

bsp.:
[anfang]text[ende]
soll zu
<div style="margin-left:1cm">text</div>
werden

dann sieht mein befehl dafür in php so aus:

$string=preg_replace("/\[anfang\](.*)\[ende\]/isU","<div style=\"margin-left:1cm\">\\1</div>",$string);
probleme gibt es, sobald ich als string folgendes nehme:
[anfang]text[anfang]text2[ende][ende]

irgendwie kann ich nicht nachvollziehen, wie sich das lösen lässt

BLUESCREEN3D
15-05-2004, 00:27
keiner hier mit ahnung von regulären ausdrücken?

peschmae
15-05-2004, 07:08
was soll denn aus dem 2. werden?

MfG Peschmä

BLUESCREEN3D
15-05-2004, 16:50
Original geschrieben von peschmae
was soll denn aus dem 2. werden?
das soll auch ersetzt werden

hier mal ein beispiel, was das ergebnis ist:


echo preg_replace("/\[anfang\](.*)\[ende\]/isU","<div style=\"margin-left:1cm\">\\1</div>","[anfang]text[anfang]text2[ende][ende]");

ergibt ein leicht eingerücktes (die unterstriche stellen die einrückung dar):

____text[anfang]text2
[ende]

es sollte aber so aussehen:

____text
________text2

BLUESCREEN3D
16-05-2004, 01:06
ich habe jetzt eine lösung gefunden, aber so gut gefällt mir die nicht, da preg_replace mehrmals aufgerufen werden muss:

$a="[anfang]text[anfang]text2[ende][ende]";
$regexp="/[anfang](.*)[ende]/isU";
while(preg_match($regexp,$a))
{
$a=preg_replace($regexp,"<div style=\"margin-left:1cm\">\1</div>",$a);
}
echo $a;