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" ?>
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:
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
Gruß,
Michael
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

