2014-09-30 70 views
0

我有以下查詢:正則表達式中的SQLite查詢會無法識別的記號例外

String selectQuery = "SELECT * FROM " + DOCUMENT_TABLE + " WHERE " + DOCUMENT_TYPE + " REGEXP " + "(^|,)(pdf)(,|$)"; 

在編譯的時候我收到此錯誤:

android.database.sqlite.SQLiteException: unrecognized token: "^" (code 1): , while compiling: SELECT * FROM DOCUMENTTABLE WHERE TYPE REGEXP (^|,)(pdf)(,|$)

從where子句中寫在下面的值的列格式:

  • DOC,PDF
  • PDF
  • PDF,DOC

如何使用正則表達式來獲取正確的信息(我的情況下,獲得了在pdf格式的所有文檔,太)?

+0

在「表達式」(單引號)中放入正則表達式。 – Rustam 2014-09-30 11:28:56

回答

1

正則表達式必須是一個字符串常量,因此與'single quotes'圍繞着它。這解決了語法問題。

但是,在sqlite中沒有REGEXP的實現,而且Android的sqlite API並不真的讓你安裝REGEXP的實現。

要解決基本問題,請考慮重新設計您的模式,以便您不首先在逗號分隔值上存儲查詢。

1

你必須放在單引號中的正則表達式:

" REGEXP " + "'(^|,)(pdf)(,|$)'"; 
# here __^   and __^ 

您還可以使用:

" REGEXP '\bpdf\b'";