Группы захвата регулярных выражений С++ 11 по имени

Я конвертирую свои регулярные выражения на основе повышения в регулярное выражение С++ 11. У меня есть группа захвата под названием url:

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

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

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


person Travis Parks    schedule 02.06.2013    source источник
comment
Вы пробовали (?P<url>.*?) вместо (?<url>.*?) ?   -  person HamZa    schedule 03.06.2013
comment
@HamZa Я не уверен, поддерживает ли регулярное выражение С++ 11 именованные группы захвата. Я только что прочитал всю главу, посвященную этой теме, в новом «Языке программирования C++» Страуструпа, и там она даже не упоминается. И многие ссылки в Интернете, кажется, не указывают на обратное.   -  person Travis Parks    schedule 03.06.2013
comment
Похоже, что он не поддерживает именованные группы в соответствии с этим ответом.   -  person HamZa    schedule 03.06.2013


Ответы (1)


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

person aaronman    schedule 03.06.2013
comment
Можете ли вы опубликовать пример извлечения вложенной группы? Возможно, где спичка может быть по обе стороны от трубы? - person Travis Parks; 03.06.2013
comment
В основном я хочу увидеть, как эффективно извлекать мой URL-адрес на основе моего опубликованного примера, обновленного, чтобы не полагаться на именованные группы захвата. - person Travis Parks; 03.06.2013
comment
Это меня огорчает! - person Dilawar; 06.06.2021