SQLite查询中的正则表达式提供无法识别的令牌异常

时间:2014-09-30 11:23:14

标签: android regex sqlite

我有以下查询:

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

在编译时我收到此错误:

  

android.database.sqlite.SQLiteException:无法识别的令牌:“^”(代码   1):,同时编译:SELECT * FROM DOCUMENTTABLE WHERE   TYPE REGEXP(^ |,)(pdf)(,| $)

where子句中的列具有以下格式写入的值:

  • DOC,PDF
  • PDF
  • PDF,DOC

如何使用正则表达式检索正确的信息(我的情况下,获取所有pdf格式的文档)?

2 个答案:

答案 0 :(得分:1)

您必须将正则表达式括在单引号之间:

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

你也可以使用:

" REGEXP '\bpdf\b'";

答案 1 :(得分:1)

正则表达式必须是字符串文字,因此用'single quotes'包围它。这解决了语法问题。

但是,在sqlite中没有REGEXP实现,并且Android sqlite API实际上不允许您为REGEXP安装实现。

要解决根本问题,请考虑重新设计您的架构,以便您不会首先在逗号分隔值上存储查询。