Hallo Malcolm,
Ansich habe ich mit diesem Ausdruck keine Probleme, was läuft hier falsch?
alles. Ein wundervolles Beispiel für den unnötigen Einsatz von regulären Ausdrücken.
$var = preg_replace('#\[mynews\](.*)\[/mynews\]\s*(.*)#', "$1", $marginalien);
Kritik an dieser Variante erwünscht.
a) Wenn Du schon reguläre Ausdrücke benutzt.
warum speicherst Du in Deiner Backreferenz alles, wenn Du für Deine LIMIT-Klausel nur die erste Ziffernfolge benötigst, die nach [mynews] und vor [/mynews] auftritt?
b) Viel besser: verzichte auf den RegExp.
Das konzeptionelle Problem sehe ich darin, dass Du mühsam eine Information, die Du zwingend benötigst, mittels regexp aus einer Zeichenkette extrahierst. Ich halte das *nicht* für eine gute Idee. Ganz besonders dann nicht, wenn die Zeichenkette ohnehin zuerst aus einer DB ausgelesen wird.
Speichere diese offensichtlich wichtige Information in einer eigenen Spalte ab - und Du erledigst Dein Problem weit eleganter als mit dem elegantesten und korrektesten regulären Ausdruck, den man sich vorstellen kann.
Durch die getrennte Speicherung wird die LIMIT-Klausel zum Kinderspiel und Du kannst Du Dein preg_replace() durch den .-Operator ersetzen, was nicht nur eleganter sondern auch leichter lesbar ist.
Korrigiere daher Dein Tabellendesign.
Freundliche Grüße
Vinzenz