Vinzenz Mai: RegEx - Zahl filtern und in einem Query verwenden

Beitrag lesen

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