Я использую RE2, чтобы соответствовать регулярному выражению для некоторого текста, но я борюсь с извлечением результата.
Что я хочу это:
Текст: «Образец текста»
Регулярное выражение: «p. * X»
Извлеките полное соответствие регулярному выражению из текста: «ple tex»
Я не могу найти какую-либо функцию в RE2 API, которая поддерживает это. PartialMatch извлекает только группы из регулярного выражения (помеченные круглыми скобками), но мои регулярные выражения исходят от пользователей, я не могу заставить их всегда заключать свои регулярные выражения в группу. Я также не хочу вручную оборачивать каждое регулярное выражение в группе, потому что это не похоже на элегантное решение, и оно не будет работать, если пользователь поместит модификатор в начале регулярного выражения. Похоже, что это очень базовая функциональность, поэтому я удивлен, что нет четкого способа сделать это.
Кто-нибудь знает решение этой проблемы?
Обертывание всего шаблона является рабочей альтернативой, так как встроенные модификаторы не обязательно должны находиться в самом начале шаблона, и когда вы добавляете пару внешних скобок, например, в ((?s)go.*there|take.*this)
, (?s)
Модификатор DOTALL будет по-прежнему применяться к обоим .
в шаблоне.
string text;
if (RE2::PartialMatch("Sample text", "(p.*x)", &text)) {
// Put more code here
}
Других решений пока нет …