我检查了很多关于SO的帖子,它们似乎与我正在做的事情相符,但是我无法让它发挥作用,所以也许我错过了一些明显的东西。 像许多其他人一样,我试图只匹配单词而不是部分匹配,我尝试了所有[^ a-zA-Z]并且没有任何匹配,所以我试图将其缩小到更简单的测试用例,看起来像[]根本不为我工作。我使用此代码:
String flashcardSearchQuery = "SELECT * FROM " + TABLE_NAME + " where " + COLUMN_ENGLISH_WORD +
" LIKE " + "'%" + search_str + "[^,]%'";
ArrayList<Flashcard> flashList = new ArrayList<>();
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.rawQuery(flashcardSearchQuery, null);
因此,当我搜索所有&#39;时,它应匹配以下内容:
all
mall
all or nothing
但不是这些:
all, whole
recall, wow
但我一无所获。类似的,当我尝试没有&#39; ^&#39;只是&#34; [,]%&#34;什么都不匹配,我错过了什么?
我在调试器中看到了这个输出,所以连接似乎有效,对吗?
SELECT * FROM其中english_word LIKE&#39;%little [^,]%&#39;
[更新] 很棒,两条建议(REGEXP
/ GLOB
)都有效:
String flashcardSearchQuery = "SELECT * FROM " + TABLE_NAME + " where " + COLUMN_ENGLISH_WORD +
" GLOB " + "'*[^a-zA-Z]" + search_str + "[^a-zA-Z]*'";
String flashcardSearchQuery = "SELECT * FROM " + TABLE_NAME + " where " + COLUMN_ENGLISH_WORD +
" REGEXP " + "'.*[^a-zA-Z]" + search_str + "[^a-zA-Z].*'";
现在我只需要弄清楚如何包含搜索词是最终词的情况,例如
所有
这都是
有趣的是,许多引用似乎都表明LIKE
应该与[] ...
[2ND UPDATE] 我刚刚选择了2个班轮,虽然在正则表达式方面还不够精通,无法理解为什么它甚至涵盖了&#39; start&#39;排列:
String flashcardSearchQuery = "SELECT * FROM " + TABLE_NAME + " where " +
COLUMN_ENGLISH_WORD + " REGEXP '.*[^a-zA-Z]" + search_str + "[^a-zA-Z].*' OR " +
COLUMN_ENGLISH_WORD + " REGEXP '.*[^a-zA-Z]" + search_str + "'";
答案 0 :(得分:1)
LIKE运算符不支持字符范围。
改为使用GLOB:
C:\Users\vonc\data\git\git>git most
......... [wait a long time] .........
1585 Makefile
1060 cache.h
748 gitweb/gitweb.perl
730 refs/files-backend.c
714 diff.c
670 Documentation/config.txt
659 refs.c
624 git-svn.perl
600 sha1_file.c
517 contrib/completion/git-completion.bash
501 builtin/apply.c
499 Documentation/git.txt
491 GIT-VERSION-GEN
433 git-p4.py
413 git.c
407 builtin/pack-objects.c
401 revision.c
376 builtin/commit.c
336 merge-recursive.c
...
答案 1 :(得分:1)
可能这应该工作,即在逻辑中添加两个where子句并满足两者,一个用于搜索字符串,另一个用于逗号
String flashcardSearchQuery = "SELECT * FROM " + TABLE_NAME + " where " + COLUMN_ENGLISH_WORD + " LIKE " + "'%" + search_str + "%' AND " + COLUMN_ENGLISH_WORD + " NOT LIKE '%,%'";
答案 2 :(得分:0)
LIKE 不够强大,无法使用正则表达式。
尝试使用 REGEXP
Select * from table_name where some_string REGEXP '.*all[^,\.]*'