2

私のコレクションでは、次のクエリで結果が返されます。

db.c.find({t:/a/})

しかし、以下のクエリ (および を持つその他の正規表現\uXXXX) は結果を返しません。

db.c.find({t:/\u0041/})

なにが問題ですか?

4

2 に答える 2

2

この理由は、ドキュメントによると

MongoDBは、正規表現にPCREを使用します。

ただし、PCREドキュメントには

次のPerlエスケープシーケンスはサポートされていません:文字名またはUnicode値が後に続く場合、\ l、\ u、\ L、\ U、および\N。(\ N自体は、改行以外の文字と一致することがサポートされています。)実際、これらはPerlの一般的な文字列処理によって実装され、パターン一致エンジンの一部ではありません。これらのいずれかがPCREで検出された場合、デフォルトでエラーが生成されます。ただし、PCRE_JAVASCRIPT_COMPATオプションが設定されている場合、\Uと\uはJavaScriptが解釈するように解釈されます。

そうは言っても、このSOの質問は役立つかもしれません。

于 2012-11-12T06:02:49.393 に答える
2

Ray Toalの回答を使用して\x{XXXX}、JavaScriptの代わりにPCRE構文を使用すると\uXXXX問題が解決しました。

db.c.find({t:/\x{0041}/})
于 2012-11-12T06:15:04.520 に答える