2014-09-11 143 views
2

我正在使用Java,我有一个分贝,SQLite 3.8.5,2列,ID(int key)note(string)。 我希望能够查询包含多个单词的所有笔记。用正则表达式SQLite查询

举例: 注1: “你好,我的电影是福”
注2: “你好,这部电影是黄色的”
注3:(!尤达,不要输入) “你好,FOO这部电影是”
由用户定的过滤器的话:“富”,“电影”,从查询

结果应该是注1和注2

此正则表达式的作品,但我似乎无法找到如何让正则表达式作为查询:.*(?=.*movie)(?=.*foo).*

BR

回答

0

SQLite有一个REGEXP运算符,用于比较值。问题在于,默认情况下,SQLite不提供常规表达式比较的实现,所以你必须提供一个。它通过实现regexp()自定义SQL函数完成。

要了解如何实现自定义的SQL函数,请参阅:Writing user defined SQL functions for SQLite using Java or Groovy?

换句话说,你必须告诉SQLite的,应该如何进行正则表达式匹配,提供了Java功能,没有工作。

一旦你实现了regexp函数,你可以开始在SQL查询中使用REGEXP运算符。

3

除了上面的答案,Java中的解决方案,为了完整性。您必须为REGEXP操作员应该工作的每个连接执行此操作。

   // Create regexp() function to make the REGEXP operator available 
       Function.create(connection, "REGEXP", new Function() { 
        @Override 
        protected void xFunc() throws SQLException { 
         String expression = value_text(0); 
         String value = value_text(1); 
         if (value == null) 
          value = ""; 

         Pattern pattern=Pattern.compile(expression); 
         result(pattern.matcher(value).find() ? 1 : 0); 
        } 
       });