PHP: preg_replace Problem bei zwei Ersetzungen in einer Zeile

X_FISH

Grand Admiral Special
Mitglied seit
03.02.2006
Beiträge
4.206
Renomée
1.941
  • BOINC Pentathlon 2017
  • BOINC Pentathlon 2018
  • BOINC Pentathlon 2019
  • SETI@Home Wow!-Event 2019
  • BOINC Pentathlon 2020
  • THOR Challenge 2020
  • BOINC Pentathlon 2021
  • BOINC Pentathlon 2022
  • BOINC Pentathlon 2023
Ist schon länger her das ich mit regulären Ausdrücken gearbeitet habe. Daher stehe ich gerade auf dem Schlauch.

Zunächst der Code:

Code:
$string = '[[cite:1]]';
$string = preg_replace('/\[\[cite:(.+)\]\]/i', "<a href=\"#cite_note-$1\" id=\"cite_ref-$1\" class=\"source\"><sup>[$1]</sup></a>", $string);

[[cite:1]] soll durch den HTML-Code ersetzt werden, klappt soweit auch gut. Aber wenn zwei solche Stellen binnen einer Zeile auftauchen geht es nicht.

Beispiel:

Foo bar[[cite:1]] lorem ipsum[[cite:2]] Satzende.

Verwendet wird der Anfang vom ersten Auftreten und das Ende vom letzten Auftreten in der Zeile. Gibt es da einen kleinen Kniff den ich gerade übersehe bzw. mangels »im Thema sein« nicht kenne?

Merci vorab,

Martin
 
In der Regel ist der Punkt in '(.+)' zu stark, weil das alles mit einschließt bis zum Ende des zweiten "Cite" in der Zeile. Vermutlich funktioniert es schon, wenn man das z.B. so macht:

Code:
'/\[\[cite:([^\]]+)\]\]/i'

Also statt Alles macht man Alles bis auf ein ']'.
 
Bingo, jetzt funktioniert es so wie gewünscht.

Grüße, Martin
 
Zurück
Oben Unten