2

在我的集合中,以下查询返回一些结果:

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

但下面的查询(以及任何其他具有 的正则表达式\uXXXX)不返回任何结果:

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

怎么了?

4

2 回答 2

2

原因是根据文档

MongoDB 将 PCRE 用于正则表达式。

但是 PCRE 文档说

不支持以下 Perl 转义序列:\l、\u、\L、\U 和 \N(如果后跟字符名或 Unicode 值)。(支持 \N 本身,匹配非换行符。)事实上,这些是由 Perl 的通用字符串处理实现的,而不是其模式匹配引擎的一部分。如果 PCRE 遇到任何这些,默认情况下会生成错误。但是,如果设置了 PCRE_JAVASCRIPT_COMPAT 选项,则 \U 和 \u 被解释为 JavaScript 解释它们。

也就是说,这个 SO question可能会有所帮助。

于 2012-11-12T06:02:49.393 回答
2

使用 Ray Toal 的答案,使用 PCRE\x{XXXX}语法而不是 JavaScript\uXXXX解决了问题。

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