2

根据 Mongo 文档,它使用 PCRE 引擎,并且 PCRE 支持 \b 和 \w 用于 unicode 字符,但遵循 RegEx 与 Unicode 字符串不匹配,是否有任何解决方案或替代语法?

// in Mongo console:
 db.col.find({word:/\b\pL\b/});

// in PHP
(new Mongo())->db->col->find(['word'=>new MongoRegex('/\b\pL\b/u')]);
4

1 回答 1

1

我找不到任何关于 MongoDB 的 PCRE 实现支持哪些特性的文档,但如果它包括\pLUnicode 字符类以及前瞻和后瞻断言,那么一个支持 Unicode 的替代品\b将是:

(?:(?=\pL)(?<!\pL)|(?!\pL)(?<=\pL))

基本上,(?=\pL)(?<!\pL)如果下一个字符是字母而前一个不是,则(?!\pL)(?<=\pL)匹配,反之,如果前一个字符是字母而下一个不是,则匹配。

当然,如果我们已经知道相邻字符可以是什么,这个正则表达式可以被简化很多。例如,Unicode 感知版本\b\pL+\b可以简单地写成:

(?<!\pL)\pL+(?!\pL)
于 2013-01-11T07:54:28.900 回答