Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

regexp und mysql: escapen von sonderzeichen





Frage

hallo! ich hab mal wieder ein problemchen: ich durchsuche mit regexps eine mysql-datenbank...ich weiß, die syntax ist recht krankhaft, aber es ist einfach schneller als die regex-engine in php anzuschmeißen... ich durchsuche die beiträge eines forums, und zwar auf den anfangsbuchstaben des inhalts. wenn aber nun ein format-tag davor steht, soll dieser nicht berücksichtigt werden, ebenso wie leerzeichen nicht. $sql = "SELECT * FROM board WHERE trashcan = '0' AND content REGEXP '^[[:space:]]*(\[.*\])*[[:space:]]*(m).*$' "; "m" steht für einen anfangsbuchstaben... folgendes wird nicht gematched: "[code]mumu" mache ich ienen fehler beim escapen der eckigen klamern? oder was mach ich falsch?

Antwort 1 von semi

Wie sehen die Zeichenketten aus, die in der Spalte 'content' vorkommen können? Ist es HTML?


Antwort 2 von Feuervogel

nein, es ist so forums code...ganz bestimmt kein html, geparsed wird später. es kann text von folgender form sein:


jetzt [f]mal[k]etwas[/k]komisches[/f] haha

bla


oder so ähnlich...im regex geht es ja um den anfang des contents...der kann auch mal so aussehen:

[ code ]<?php echo "bla" ?>

Antwort 3 von Feuervogel

aber eigentlich ist es auch wurscht, weil ich ne andere lösung für den admin im board gefunden habe...naja, interessieren täts mich trotzdem:)

Antwort 4 von semi

Ich würde es gerade umgekehrt machen. Bei Speichern eines Threads würde ich die Kürzel ersetzen, gültigen HTML-Code generieren und diesen in der Datenbank speichern.
Dadurch wären die lesenden Abfragen ohne viel Konvertiererei möglich.

Im obigen Code scheint es so zu funktionieren:
REGEXP '^[[:space:]]*\\[[/b][^[b]\]]*\\][[:space:]]*(mumu).*'
bzw.
REGEXP '^\\[[/b][^[b]\]]*\\](mumu).*'
Die Escapes für die eckigen Klammern sind fett markiert.
Soll heißen:
[ gefolgt von beliebig vielen Zeichen, solange es kein ] ist. Danach folgt ], dann 'mumu', dann der Rest.
So sieht ma es am besten
REGEXP '^\\[  [ ^\] ]  \\]  (mumu) .*'
Innerhalb von [...] reicht ein Backspace.

Gruß,
Michael


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: