2013-06-02 3 views
6

Я преобразовываю регулярные выражения на основе boost в C++ 11 regex. У меня есть группа под названием захвата url:C++ 11 Regex Capture Groups По имени

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)')) 

С повышением, если вы имели smatch вы могли бы назвать match.str("url"), чтобы получить группу захвата по имени. С std::smatch я вижу только индексированные подзаголовки.

Как я могу получить доступ к захвату URL, используя класс std :: smatch?

+0

Вы пробовали '(? P . *?)' Вместо '(? . *?)'? – HamZa

+0

@HamZa Я не уверен, поддерживает ли C++ 11 regex названные группы захвата. Я просто прочитал всю главу, посвященную этой теме в новом «языке программирования C++» в Stroustrup, и он даже не упоминает об этом. И многие из онлайн-ссылок, похоже, не указывают иначе. –

+0

Кажется, он не поддерживает именованные группы в соответствии с этим [ответ] (http://stackoverflow.com/a/6398650). – HamZa

ответ

5

Вы не можете назвать группу захвата стандартом C++ 11. Регулярное выражение C++ 11 соответствует синтаксису ECMAScript. Вот ссылка, которая объясняет все это http://www.cplusplus.com/reference/regex/ECMAScript/. Несмотря на то, что это может быть разочаровывающе, если вы думаете об этом, истинное регулярное выражение не поддержит этого, это лишний раз.

+0

Можете ли вы опубликовать пример извлечения вложенной группы? Может быть, где матч может быть по обе стороны трубы? –

+0

Вы хотите сказать, что матч уже сделан – aaronman

+0

Я в основном хочу посмотреть, как эффективно извлечь мой url на основе моего опубликованного примера, обновленного, чтобы не полагаться на названные группы захвата. –