【问题标题】:SQLite query with regex使用正则表达式的 SQLite 查询
【发布时间】:2014-09-11 12:03:38
【问题描述】:

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

示例: 注 1:“你好,这部电影是 foo”
注2:“你好,这部电影是黄色的”
注3:“你好,这部电影是”(尤达,不要打字!)
给定用户过滤词:“foo”“movie”

查询的结果应该是注1和注2。

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

BR

【问题讨论】:

    标签: java regex sqlite


    【解决方案1】:

    为了完整起见,除了上面的答案,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);
      }
    });
    

    【讨论】:

      【解决方案2】:

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

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

      换句话说,您必须通过提供完成这项工作的 Java 函数来告诉 SQLite 它应该如何执行正则表达式匹配。

      实现regexp 函数后,您可以开始在SQL 查询中使用REGEXP 运算符。

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 2011-09-26
        • 2015-05-03
        • 2021-01-09
        • 1970-01-01
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多