Boost版本1.60.0 gcc 4.8.4
当我用字符串.*{
构造一个boost :: regex对象时,我得到一个异常,说明:
what(): Missing } in quantified repetition. The error occurred while parsing the regular expresion: '.*{>>>HERE>>>'.
当对象为boost::regex::extended
类型时会发生此错误,但如果该对象为boost::regex::perl
则不会发生此错误。
所以以下引发异常:
regString(".*{");
boost::regex reg_e(regString, boost::regex::extended);
但这不是:
regString(".*{");
boost::regex reg_p(regString, boost::regex::perl);
这是预期的行为还是错误?
如果是预期的,为什么?什么是适当的工作?
答案 0 :(得分:2)
{
在此上下文中是一个特殊字符 ,您需要将其转义。
http://www.boost.org/doc/libs/1_60_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html
请注意,“{”和“}”字符将被视为普通文字 当在不重复的上下文中使用时:这与Perl 5.x匹配 行为。例如,在表达式“ab {1”,“ab1}”和“a {b} c”中 大括号都被视为文字,没有错误 提高。