Entwickler-Ecke

Programmiersprachen (Server) - preg_replace - suchmuster


Mogtar - Fr 08.08.08 10:51
Titel: preg_replace - suchmuster
Hallo,

ich habe folgenden HTML-Text:


Quelltext
1:
2:
[ARTIKEL=9]hallo[/ARTIKEL=9] <br> 
[ARTIKEL=11]hallo[/ARTIKEL=11]


nun möchte ich diesen mit preg_replace parsen und ersetzen nach:


Quelltext
1:
2:
<a href=index.php?show=artikel&id=9>hallo</a> <br> 
<a href=index.php?show=artikel&id=11>hallo</a>


mit


Quelltext
1:
$text = preg_replace("#\[ARTIKEL=(.*)\](.*)\[\/ARTIKEL=(.*)\]#", "<a href=index.php?show=artikel&id=$1>$2</a>", $text);                    


funktioniert das aber nur wenn ich ein Eintrag hab ala : "[ARTIKEL=9]hallo[/ARTIKEL=9] <br>"

bei zwei nimmt er dann: den anfang [ARTIKEL=9] und dann aber [/ARTIKEL=11] als ende.

wie muss der Suchsyntax aussehen ?

mfg,
Mogtar


Mogtar - Fr 08.08.08 12:32

Die Lösung für dieses Problem ist:
Zitat:
(.*)
durch
Zitat:
(.*?)
ersetzen!


BenBE - Fr 08.08.08 17:34

Die elegantere Lösung wäre:
1. (\d+) statt (.*?) im öffnenden Tag zu verwenden
2. Wie erwähnt Ungreedy (.*?) zu arbeiten
3. Mit Look Ahead absichern, dass der End-Tag nicht im zweiten Submatch enthalten ist.

Ach ja: Und ein Glück, dass ich [Artikel=42]<script>alert('XSS');</script>[/Artikel] schreiben darf als Artikelbeschreibung ;-)