2017-01-07 7 views
-1

mongo + javaに$ regexを指定して$をクエリに書き込もうとしています。モンゴシェルから正常に動作していると私は結果を取得しています:

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

本当に問題を引き起こしているのは/ 'sだと思います。文字列( '^')の開始前に '/'を付けることはできません。 (Javaは、正規表現の開始と終了を示すために '/'を使用しません)。 –

+0

"Javaコードが正規表現の前後に二重引用符を追加しています":Q:正確にはどういう意味ですか? Q:文字列リテラルの[エスケープ文字](http://docs.oracle.com/javase/tutorial/java/data/characters.html)( '\\')に精通していますか? – paulsm4

+0

ありがとう@AndyTurner。あなたが正しいです。 Lists.newArrayList(Pattern.compile( "^ 1332444344"))正常に機能しました! –

答えて

0

私はそれが本当に問題を引き起こしている/のだと思います。文字列(^)の開始前に/を使用することはできません。

Javaでは、他の言語のように正規表現の開始と終了を示すために/を使用しません。正規表現は他の文字列と同様に書かれているため、"を使用して開始と終了をマークします。

少なくとも正規表現の先頭にある/を削除します。最後にも削除することをお勧めします(実際に一致させようとしているものによって異なります)。