【问题标题】:mongodb regex with a range of unicode characters具有一系列 unicode 字符的 mongodb 正则表达式
【发布时间】:2019-02-18 05:43:48
【问题描述】:

我尝试将 mongodb(3.4 版)$regex 运算符与一系列 unicode 字符一起使用。但我无法让它工作(我正在使用 robomongo 来测试它)。

我尝试了以下方法:

db.getCollection('myCollection').find(
{ 
    "field": { 
            $regex: /[\x{20000}-\x{2A6D6}]/
      } 
})

输出如下错误:

错误:第 4 行:无效的正则表达式

我设置的正则表达式必须匹配 CJK 统一表意文字扩展 B 的所有字符。 它似乎与使用 CJK unicode 十六进制值无关,因为我使用更简单的正则表达式也有同样的错误,例如 $regex: /[\x{0}-\x{1}]/

你能帮我理解为什么我的正则表达式不起作用吗?

【问题讨论】:

  • 该模式不应该用 JS 正则表达式解析吗?试试/(?:[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6])/ 等效项。或者,检查它是否支持 ES6:/[\u{20000}-\u{2A6D6}]/u
  • /[\u{20000}-\u{2A6D6}]/u 产生错误(u 不是有效的正则表达式标志),没有u,错误是正则表达式无效
  • 如果使用字符串文字会怎样? $regex: '[\x{0}-\x{1}]'
  • /(?:[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6])/ 被 mongo 接受但没有产生结果(应该是,考虑到我拥有的数据集),我仍然想知道为什么
  • @revo $regex: '[\x{0}-\x{1}]' 产生相同的错误“无效的正则表达式”

标签: regex mongodb unicode pcre cjk


【解决方案1】:

您必须使用简单的引号来支持 PCRE 表达式(参见 https://docs.mongodb.com/manual/reference/operator/query/regex/ )并且您必须转义反斜杠。所以以下应该工作:

db.getCollection('myCollection').find(
   { "field": { 
      $regex: '[\\x{20000}-\\x{2A6D6}]' 
      }
   })

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    相关资源
    最近更新 更多