2015-06-09 65 views
2

我想查找[/](在這種情況下爲12345)之間的數字。使用C++中的正則表達式在[/和]之間找到數字

我寫這樣的代碼:

float num; 
string line = "A111[/12345]"; 
boost::regex e ("[/([0-9]{5})]"); 
boost::smatch match; 
    if (boost::regex_search(line, match, e)) 
    { 
     std::string s1(match[1].first, match[1].second); 
     num = boost::lexical_cast<float>(s1); //convert to float 
     cout << num << endl; 
    } 

不過,我得到這個錯誤:The error occurred while parsing the regular expression fragment: '/([0-9]{5}>>>HERE>>>)]'.

+0

你需要逃避[ – Bastien

+1

你必須逃脫外括號像'\ ['和'\]'。 –

+1

是的 - 對不起。 '\'必須在C++字符串中轉義爲'\\'。所以最後的字符串看起來應該像'\\ [/([0-9] {5})\\]' –

回答

1

你需要加倍逃避[],在正則表達式的特殊字符表示character classes。正確的正則表達式的聲明將是

boost::regex e ("\\[/([0-9]{5})\\]"); 

這是必要的,因爲C++編譯器還採用了反斜線逃避實體,如\n,和正則表達式引擎使用反斜槓使他們像對待文字逃避特殊字符。因此,反斜槓得到翻倍。如果需要匹配文字反斜槓,則必須使用其中的4個(即\\\\)。

+0

感謝您的解決方案和鏈接。我會用它作爲參考。 – KH17

1

使用以下(逃避[],因爲他們是在正則表達式的特殊字符意義的字符類):

\\[/([0-9]{5})\\] 
^^   ^^ 
+0

正是我在尋找的感謝! – KH17

+0

高興地幫助:) –

相關問題