MongoDB RegEx Доработка двигателя

Согласно документации Mongo, он использует механизм PCRE и поддержку PCRE \b и \w для символов Юникода, но следование 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')]);

1 ответ

Решение

Я не смог найти никакой документации о том, какие именно функции поддерживает реализация PCRE в MongoDB, но если она включает \pL Класс символов Unicode, а также упреждающие и упреждающие утверждения, а затем замена с поддержкой Unicode для \b было бы:

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

В принципе, (?=\pL)(?<!\pL) соответствует, если следующий символ является буквой, а предыдущий - нет, тогда как (?!\pL)(?<=\pL) и наоборот, если предыдущий символ является буквой, а следующий - нет.

Конечно, это регулярное выражение может быть сильно упрощено, если мы уже знаем кое-что о том, какими могут быть смежные символы. Например, Unicode-ориентированная версия \b\pL+\b можно записать просто как:

(?<!\pL)\pL+(?!\pL)
Другие вопросы по тегам