2012-09-28 87 views
1

我有升壓以下的正則表達式的一個問題:正則表達式和Boost

const boost::regex eComment("^\/\*[\s\S]*?\*\/|^\/\/"); 

當我運行的程序與此正則表達式,它與消息中止:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::regex_error> >' 

what(): Invalid preceding regular expression prior to repetition operator. 
The error occured while parsing the regular expression: '^/*[sS]*?*>>>HERE>>>/|^//'. 

這個規則表達式應該找到線在*.cpp文件中有註釋,但是如果行中有代碼,應該跳過。

+0

我不知道提振什麼,但我想你可能會出現問題。 [\ s \ S]轉換爲「一個空白字符或不是一個空白字符」。我認爲它應該是一個或另一個。通常正斜槓不需要在正則表達式中轉義(除非它是Perl,/是你的分隔符)。 –

+0

我想你想要的是這個。^\ s *(/\*.*?\*/ | //)...行的開頭加零的更多空格,然後是註釋。而評論是「/ *任何數量的字符* /」或「/ /任何」。如果你需要逃避反斜槓,因爲它們在C中是特殊的,那麼它將是^ \\ s *(/\\*.*?\\*/ | //) –

+0

'[\ s \ S] *?'= '1或多個字符中的0或1?'? – BoBTFish

回答

3

我認爲問題在於你忘了逃避反斜槓字符。每一個反斜槓應加倍像\\ \\Şs,而不是\ S \ S

希望它可以幫助

相關問題