升压正则表达式异常从构造函数抛出* {

升压正则表达式异常从构造函数抛出* {

问题描述:

加速版本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); 

这是预期的行为或错误?
如果预计,为什么?什么是适当的工作?

{是一个特殊字符在这方面,你需要转义它。

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”中,大括号全部视为文字,并且不会产生错误 。

+0

啊,我明白这是如何工作的。为了完整性,即使正则表达式字符串为'。* \ {' –

+0

您是否能够正常工作或者至少可以理解,我也会得到'boost :: regex :: basic'类型的相同错误? –

+0

是的,它的工作原理。我为所有3种类型(基本的,扩展的,Perl兼容的)创建正则表达式对象,所以当另一个工作时会失败。我现在单独尝试/捕获每个对象构造,并在出现故障时向用户报告,同时允许其他人继续。谢谢! –