使用$ in运算符和Java中的正则表达式

时间:2017-01-07 19:48:36

标签: java json regex mongodb

我正在尝试用mongo + java中的$ regex编写$ in查询。它从mongo shell工作正常,我得到了结果:

db.getCollection('collection').find({ "_id" : { "$in" : [ /^1332444344/]}})

然而,当我尝试从我的Java应用程序执行时,我没有得到任何结果:

DBCollection collection = db.getCollection("collection");
BasicDBObject query = new BasicDBObject();
inQuery.put("_id", new BasicDBObject("$in", input));
DBCursor cursor = collection.find(query);

// This returns no results
// Query: { "_id" : { "$in" : [ { "$regex" : "/^1332444344/"} ] }}
input = Lists.newArrayList(Pattern.compile("/^1332444344/"));

// The following as well returned nothing
// Query: { "_id" : { "$in" : [ "/^1332444344/" ] }}
input = Lists.newArrayList("/^1332444344/"));

Java代码在正则表达式周围添加双引号,这似乎导致了这个问题。

我也试过以下但得到了一个json解析异常:

BasicQuery bq = new BasicQuery("{ \"_id\" : { \"$in\" : [ /^1332444344/ ]}}")

此问题是否有解决方法?

由于

1 个答案:

答案 0 :(得分:0)

我认为/导致了这个问题。/在字符串开头(^)之前,您不能拥有/

Java并没有像其他语言一样使用"来表示正则表达式的开头和结尾。它使用/来标记开始和结束,因为正则表达式与任何其他字符串一样。

删除error: { message: '(#100) Unsupported attachment type', type: 'OAuthException', code: 100, error_subcode: 2018046, fbtrace_id: 'CObB3+0fgMw' } ,至少在正则表达式的开头;您可能也想删除最后的那个(取决于您实际上想要匹配的内容)。