2017-03-29 75 views
1

我必須編寫一個C++正則表達式,但是我不能在regex_match上得到正確的結果,因爲我是C++新手。 用於測試的字符串是:D10A7; 可以說unsigned_char[] stringToBeTested="D10A7"; 我要做的是在regex_match之後,我將在兩個不同的short變量中提取10和7以供應用程序使用。 'D'後的數字總是兩位數字,'A'後的數字總是 是一位數字。 我嘗試做的是:爲什麼regex_match與我的正則表達式不匹配?

boost::regex re("D([0-9])(/([0-9]))?"); 
boost::cmatch mr; 
if (boost::regex_match(stringToBeTested, mr, re)) 
{  
    number = atoi(mr.str(1).c_str()); //Must be 10 
    axis = atoi(mr.str(2).c_str()); //Must be 7 
} 

如何生成的boost ::正則表達式再爲這個情況,請詳細解釋了答案。

+1

什麼是斜槓?您嘗試匹配的字符串中沒有斜線? –

+0

在附註上,我建議使用更多的C++ ish ['std :: stoi()'](http://en.cppreference.com/w/cpp/string/basic_string/stol),它允許你除去''.c_str()',這在純粹的C++代碼中是沒有用的,例如, G。 'number = stoi(mr.str(1))'。 – zett42

回答

3

regex_match需要完整的字符串匹配。你需要提供一個能夠做到這一點的模式。

boost::regex re("D([0-9]{2})A([0-9])"); 

這裏,

  • D - 匹配D
  • ([0-9]{2}) - 捕捉到第1組兩個數字
  • A - 匹配A
  • ([0-9]) - 捕捉到第2組單個數字。

請參閱online demo of the above regex

+0

感謝您的回答,只是爲了澄清疑問,可以說我有'D124',它必須存儲號碼= 12和軸= 3。現在將會是什麼樣的regix(因爲我已經在這裏刪除了'A')。 '/'在正則表達式中的作用是什麼。我無法找到好的文檔,但尚未很好地理解。 –

+1

您可以使用['^ D([0-9] {2})(?:A?([0-9]))?$'](https://regex101.com/r/Zp1vk0/1)然後。 '/'符號在正則表達式中沒有具體含義,它被匹配爲一個文字'/'符號。 –

+0

而這個'?'標記意味着什麼? –

相關問題