使用String匹配的JDOQL DATANUCLEUS过滤

时间:2013-11-22 10:30:45

标签: jdo datanucleus jdoql

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

matches(String pattern):返回字符串是否与传递的表达式匹配。 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);

- >回归书,Book2

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

由于

1 个答案:

答案 0 :(得分:0)

在几十次失败的测试之后,我可以说(使用DN 2.1)MATCHES不起作用(针对JAVA string.matches(正则表达式)进行测试):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'