2016-04-14 77 views
-1

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

這是預期的行爲或錯誤?
如果預計,爲什麼?什麼是適當的工作?

回答

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」中,大括號全部視爲文字,並且不會產生錯誤 。

+0

啊,我明白這是如何工作的。爲了完整性,即使正則表達式字符串爲'。* \ {' –

+0

您是否能夠正常工作或者至少可以理解,我也會得到'boost :: regex :: basic'類型的相同錯誤? –

+0

是的,它的工作原理。我爲所有3種類型(基本的,擴展的,Perl兼容的)創建正則表達式對象,所以當另一個工作時會失敗。我現在單獨嘗試/捕獲每個對象構造,並在出現故障時向用戶報告,同時允許其他人繼續。謝謝! –

相關問題