Franz B.: MySQL 5.0 RegExp

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.

  1. 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.

    1. 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.

      1. 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

        1. 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.

          1. 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