【问题标题】:MongoDB \uXXXX issueMongoDB \uXXXX 问题
【发布时间】:2012-11-12 05:53:30
【问题描述】:

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

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

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

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

怎么了?

【问题讨论】:

    标签: regex mongodb unicode


    【解决方案1】:

    原因是根据the documentation

    MongoDB 将 PCRE 用于正则表达式。

    但是 PCRE 文档说

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 哇,这个近 7 年前的答案仍然有效。不错。
      猜你喜欢
      • 2019-02-25
      • 2017-02-16
      • 1970-01-01
      • 2022-01-14
      • 2020-01-14
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多