Ошибка именованных подвыражений в Boost Regex

Я пытаюсь использовать именованные подвыражения для замены нескольких шаблонов во входной строке, используя boost::regex_replace и именованные подвыражения.

Я использую следующий код:

std::string s="Sun Fun Gun Tic Tac Toe ;$!";
boost::regex expr("(?<from1>.un)|(?<from2>[:;!])"); //Throws the error
std::string fmt("(?'from1'nm)(?'from2'sp)");
std::string s2 = boost::regex_replace(s,expr,fmt,boost::match_default|boost::format_all);
std::cout<<s2<<std::endl;

Однако при запуске выдает следующую ошибку:

terminate called after throwing an instance of 'boost::regex_error'
what():  Invalid preceding regular expression
Aborted

Подскажите пожалуйста, что я могу делать не так?


person Mindstorm    schedule 03.09.2012    source источник
comment
версия буста? liveworkspace.org/code/5fe67c46a9325236ff224de62c944198   -  person ForEveR    schedule 03.09.2012


Ответы (1)


Не знаю насчет Boost, но std::regex (в TR1 и C++11), основанный на Boost, не поддерживает именованные подвыражения.

person Pete Becker    schedule 03.09.2012
comment
На следующей странице описывается поддержка синтаксиса Perl Regex в библиотеках Boost: ссылка. Итак, я считаю, что он поддерживает то же самое. - person Mindstorm; 03.09.2012
comment
@Mindstorm - спасибо за ссылку. Они изменили его после того, как стандарт принял его (стандарт не поддерживает perl; по умолчанию используется ECMAScript, который не является синонимом perl). - person Pete Becker; 03.09.2012
comment
@Mindstorm - это не влияет на строку, помеченную как Выдает ошибку, но похоже, что строка формата должна быть чем-то вроде "$+{from1}nm$+{from2}sp". То есть $+{NAME} [o] выводит все, что соответствует подвыражению с именем 'NAME'. - person Pete Becker; 03.09.2012
comment
Переход на $+{NAME} тоже не помог. Выдает ту же ошибку. Причина, по которой я сказал, что эта строка выдает ошибку, заключается в том, что ошибка возникает, когда я пытаюсь определить выражение, используя эту строку, независимо от того, определяю ли я следующую строку формата и выполняю замену или нет. - person Mindstorm; 03.09.2012
comment
@Mindstorm - да, это то, что я имел в виду в своем предыдущем комментарии. Я просто хвастался результатами своего исследования, начиная со ссылки, которую вы предоставили. - person Pete Becker; 03.09.2012