1

将 JDO 与 Datanucleus 一起使用,我试图从我的数据库中过滤一些数据(使用 jdoql)。我想使用正则表达式进行一些复杂的搜索,我发现 JDO 提供了接受正则表达式的 String 方法“matches”,并且根据 DATANUCLEUS 文档,该方法可以接收任何类型的 ExpReg:

matches(String pattern) :返回字符串是否与传递的表达式匹配。模式参数遵循 java.lang.String.matches 方法的规则。

我能够根据一些正则表达式(如“.*”、“.”、“.*”)进行过滤,但不能使用其他表达式(如 [abcd])

有人可以确认并非所有的正则表达式语法都受支持吗?

Query q = pm.newQuery(cl, "this.name.matches(filterName)");
q.declareParameters("String filterName");
List results = (List)q.execute("Bo.*");
return pm.detachCopyAll(results);

--> 返回书,书 2

But with : q.execute("B[aoe]ok")  return nothing !

谢谢

4

1 回答 1

1

经过数十次失败的测试,我可以说(使用 DN 2.1) MATCHES 不起作用(针对 JAVA string.matches(regex)测试):http://www.datanucleus.org/products/accessplatform_2_1/jdo/jdoql_methods。 html

在我的测试中,我有以下正则表达式:

(PT)?999999990

由 JDOQL 翻译成:

LIKE '(PT)<UNPRINTABLE>999999990'

该数据库包含许多记录,例如:
999999990
PT999999990
...

此外,根据 REGEX,JDOQL 解释器似乎会改变表达式......

以下正则表达式:

(?i)(PT)?999999990 

由 JDOQL 翻译成:

LIKE '(PT)<UNPRINTABLE>999999990'
于 2015-03-19T21:32:18.037 回答