我檢查過很多帖子,他們似乎與我正在做的相匹配,但我無法讓它正常工作,所以也許我錯過了一些明顯的東西。 像許多其他人一樣,我只想匹配單詞而不是部分匹配,我嘗試了所有[^ a-zA-Z]並且沒有匹配,因此我試圖將其縮小到更簡單的測試用例,它看起來像[]根本不適合我。我使用此代碼:帶[^]的SQLite查詢不起作用
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);
所以,當我搜索 '全部',它應該匹配這些:
all
mall
all or nothing
但不是這些:
all, whole
recall, wow
但我一無所獲。類似,當我嘗試沒有'^'而只是「[,]%」沒有任何匹配時,我錯過了什麼?
我在調試器中看到了這個輸出,所以連接似乎工作,對吧?
SELECT * FROM話,其中english_word LIKE '%小[^,]%'
[更新]大,兩項建議(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
應該用[] ...工作
[月2日更新]我剛剛塵埃落定了2套,雖然沒有足夠精通正則表達式中理解爲什麼它涵蓋了連「開始」排列:
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 + "'";
據我所知,'LIKE'不支持您正在嘗試的語法。請參閱http://sqlite.org/lang_expr.html。 – CommonsWare
但他們有一個接受的答案,使用LIKE,不是嗎? https://開頭計算器。com/questions/5444300/search-for-whole-word-match-with-sql-server-like-pattern – Mairyu