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)