Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpRgLm 183 of 288 menu
◀ ▶

Ограничения движка regex в Rust

Движок крейта regex рассчитан на быстрый линейный поиск. Ради этого в нем нет некоторых приемов, которые встречаются в других языках: просмотр вперед и назад, а также повтор, который ссылается на текст уже найденной группы.

Шаблон с просмотром вперед не собирается и завершится с ошибкой при создании объекта:

use regex::Regex; fn main() { let re = Regex::new(r"aaa(?=x)").expect("bad pattern"); let _ = re; }

Обратная ссылка на номер кармана тоже не поддерживается. Такой текст шаблона не пройдет проверку при сборке:

use regex::Regex; fn main() { let re = Regex::new(r"(\w+)\s+\1").expect("bad pattern"); let _ = re; }

Задачи, где в других языках просят совпадение только если дальше идет такой-то символ, но не включая его, здесь решают иначе: отдельным шаблоном, разбиением строки или обычным кодом вокруг совпадения.

Попробуйте собрать шаблон с негативным просмотром назад и опишите, на каком шаге программа сообщит о bad pattern.

Объясните, почему шаблон с повтором той же группы не подходит для поиска удвоенных слов подряд в этом крейте.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить