MongoDB \ uXXXX问题

时间:2012-11-12 05:53:31

标签: regex mongodb unicode

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

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

但是低于查询(以及任何其他具有\uXXXX的正则表达式)都不会返回结果:

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

有什么问题?

2 个答案:

答案 0 :(得分:2)

原因是根据the documentation

  

MongoDB使用PCRE作为正则表达式。

然而,PCRE文件说

  

不支持以下Perl转义序列:\ l,\ u,\ L,          \ U和\ N后面跟着一个字符名或Unicode值。 (\ N on          支持自己的,匹配非换行符。)实际上这些          由Perl的一般字符串处理实现,不属于          它的模式匹配引擎。如果PCRE遇到任何这些,          默认情况下会生成错误。但是,如果是PCRE_JAVASCRIPT_COMPAT          选项设置,\ U和\ u被解释为JavaScript解释          它们。

尽管如此,this SO question可能会有所帮助。

答案 1 :(得分:2)

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

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