【问题标题】:Regex in SQLite query gives unrecognized token exceptionSQLite 查询中的正则表达式给出无法识别的令牌异常
【发布时间】:2014-09-30 11:23:13
【问题描述】:

我有以下疑问:

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

在编译时我收到此错误:

android.database.sqlite.SQLiteException:无法识别的令牌:“^”(代码 1): ,编译时:SELECT * FROM DOCUMENTTABLE WHERE 类型正则表达式 (^|,)(pdf)(,|$)

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

  • doc,pdf
  • pdf
  • pdf,文档

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

【问题讨论】:

  • 将正则表达式放入'expression'(单引号)。

标签: android regex sqlite


【解决方案1】:

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

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

要解决根本问题,请考虑重新设计架构,以便一开始就不会存储对逗号分隔值的查询。

【讨论】:

    【解决方案2】:

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

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

    你也可以使用:

    " REGEXP '\bpdf\b'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多