根据 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')]);
根据 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')]);
我找不到任何关于 MongoDB 的 PCRE 实现支持哪些特性的文档,但如果它包括\pL
Unicode 字符类以及前瞻和后瞻断言,那么一个支持 Unicode 的替代品\b
将是:
(?:(?=\pL)(?<!\pL)|(?!\pL)(?<=\pL))
基本上,(?=\pL)(?<!\pL)
如果下一个字符是字母而前一个不是,则(?!\pL)(?<=\pL)
匹配,反之,如果前一个字符是字母而下一个不是,则匹配。
当然,如果我们已经知道相邻字符可以是什么,这个正则表达式可以被简化很多。例如,Unicode 感知版本\b\pL+\b
可以简单地写成:
(?<!\pL)\pL+(?!\pL)