SQLLite und RegEx

  • Antworten:2
TdB4711
  • Forum-Beiträge: 2

04.07.2020, 17:09:36 via Website

Hallo, hab stundenlang gegooglet aber nix gefunden.
Folgendes: habe eine umbestimmte Anzahl von Buchstaben (bsp.'chaane')
Nun Selektiere ich mit
'"SELECT * FROM " + TABLE_NAME +" WHERE lower(" + COLUMN_NAME_WORD + ") regexp '([chaane]{6})' "'
die Daten und erwarte, das z.B. 'Aachen' dabei herauskommt. Das tut es auch, aber leider auch z.B 'Cancan' obwohl nur ein 'c' und ein 'n' vorgegeben ist.
Hat jemand eine Idee, wie ich das Problem lösen kann?

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.07.2020, 17:36:15 via App

SqLite implementiert RegEx nur als User function also kommt da ohne Definition Müll raus.

Nutze da eher eine Lib für:
https://github.com/mobi-life/sqlitere

Edith: und das RegEx würde ich überprüfen schau Mal bei regex101.com

— geändert am 04.07.2020, 18:07:06

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Rafael K.
  • Forum-Beiträge: 2.359

05.07.2020, 07:56:11 via Website

[chaane]

Die eckigen Klammern definieren eine sog. Character-Group.
Sie matched genau EIN Zeichen der Eingabe und es darf JEDES Zeichen sein, das in der Klammer steht.
[ab] matcht ein a oder ein b
[aaaaaabbbbb] matcht auch ein a oder ein b - ist einfach nur redundant definiert.

Mit der Angabe von {6} als Quantität, matcht diese Regex also eine Zeichenkette aus 6 Zeichen, von denen jedes für sich betrachtet eins aus der eckigen Klammer sein darf.
Dass Cancan gematcht wird, ist also völlig richtig.

Hilfreich?
Kommentieren