使用正则表达式的 SQLite 查询
Posted
技术标签:
【中文标题】使用正则表达式的 SQLite 查询【英文标题】:SQLite query with regex 【发布时间】: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
【问题讨论】:
【参考方案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
运算符。
【讨论】:
以上是关于使用正则表达式的 SQLite 查询的主要内容,如果未能解决你的问题,请参考以下文章
Python SQLite 正则表达式 ExecuteMany