MySQL 5.0 RegExp
Franz B.
- datenbank
Hallo,
ich will hier eine MySQL RegExp Suche ausführen, aber schaffe es leider nicht.
Ich will alle Einträge finden, die nicht im Wert haben:
die habe ich ja schon ganz gut so hinbekommen:
REGEXP '[^([:alnum:]|[:space:]|*|,|+|-]'
ich will aber noch weitere Zeichen ausgrenzen:
(
)
[
]
aber dies schaffe ich nicht, auch nicht mit escapen.
Für einen Tip wäre ich sehr, sehr dankbar.
lg
Franz B.
Hallo Franz,
Du könntest es mit den 'dot-character' Expressions versuchen, um das escapen zu vermeiden.
Z.b:
[.left-parenthesis.]
[.right-parenthesis.]
[.left-square-bracket.]
[.right-square-bracket.]
Ich hab's jetzt selbst nicht ausprobiert, aber klingt nach einem Ansatz ;)
Vielleicht hilft Dir das ja weiter.
Quelle: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Gruß
preachie
Hallo,
ich will hier eine MySQL RegExp Suche ausführen, aber schaffe es leider nicht.
Ich will alle Einträge finden, die nicht im Wert haben:
alphanumerisch
leerzeichen
*
,
+die habe ich ja schon ganz gut so hinbekommen:
REGEXP '[^([:alnum:]|[:space:]|*|,|+|-]'ich will aber noch weitere Zeichen ausgrenzen:
(
)
[
]aber dies schaffe ich nicht, auch nicht mit escapen.
Für einen Tip wäre ich sehr, sehr dankbar.
lg
Franz B.
Hallo preachie,
danke für die Antwort, aber leider bekomme ich es so auch nicht hin:
SELECT '* entlichk@()[]+-,' REGEXP '[^([:alnum:]|[:space:]|*|,|+|-|[.left-parenthesis.]|[.right-parenthesis.]|[.left-square-bracket.]|[.right-square-bracket.])]' AS found
lg
Franz B.
Was passiert denn, wenn Du folgendes SQL verwendest:
SELECT * FROM tester
WHERE text REGEXP '[([:alnum:]|[:space:]|[.asterisk.]|[.comma.]|[.plus-sign.]|[.hyphen.]|[.left-parenthesis.]|[.right-parenthesis.]|[.left-square-bracket.]|[.right-square-bracket.])]' = 0
Also ich bekomme dann nur die Zeilen aus der Tabelle tester zurückgegeben, in denen der Wert der Spalte text eben nicht eines der Zeichen in dem RegEx-Ausdruck enthalten.
War es nicht das, was Du wolltest?
Gruß
Preachie
Hallo Preachie,
danke für das Bsp. aber leider funktioniert dies auch nicht, denn hier:
SELECT '* entlichk@()[]+-,.:-_{' REGEXP '[([:alnum:]|[:space:]|[.asterisk.]|[.comma.]|[.plus-sign.]|[.hyphen.]|[.left-parenthesis.]|[.right-parenthesis.]|[.left-square-bracket.]|[.right-square-bracket.])]' = 0
habe ich ein _ und ein { und dies wird im RegExp-Teil nicht ausgeschlossen und trotzdem bekomme ich als Ergebnis eine 0.
lg
Franz B.
Hallo Franz,
die 0 als Ergebnis ist doch korrekt nei dem Statement:
SELECT '* entlichk@()[]+-,.:-_{' REGEXP '[([:alnum:]|[:space:]|[.asterisk.]|[.comma.]|[.plus-sign.]|[.hyphen.]|[.left-parenthesis.]|[.right-parenthesis.]|[.left-square-bracket.]|[.right-square-bracket.])]' = 0
Die REGEXP Funktion liefert eine 1 zurück, durch das " = 0" prüft Du, ob das Ergebnis = 0 ist was es nicht ist, also wird False bzw. 0 als Gesamtergebnis zurückgeliefert.
Wenn Du nur
SELECT '* entlichk@()[]+-,.:-_{' REGEXP '[([:alnum:]|[:space:]|[.asterisk.]|[.comma.]|[.plus-sign.]|[.hyphen.]|[.left-parenthesis.]|[.right-parenthesis.]|[.left-square-bracket.]|[.right-square-bracket.])]'
verwendest, bekommst Du eine 1 zurück.
Das " = 0" hatte ich in meinem Beispielstatement in der WHERE Bedingung verwendet, um eben nur die Datensätze aus der Tabelle zu bekommen, die kein solches Zeichen enthalten.
Oder reden wir hier gerade aneinander vorbei? ;)
Gruß
Preachie