我在boost::regex
行爲中遇到了與字符串中的\r
和\n
字符匹配時的問題。我通信通過串口與我的Linux C++應用程序中的調制解調器和我從它收到以下消息如何在使用boost :: regex時指定回車符和換行符匹配?
ATI3\r\nv3.244\r\nOK\r\n
我知道,這個字符串是正確的,因爲我實際檢查返回的每個字符的ASCII十六進制值。問題是我的應用程序需要去掉由vX.XYZ
部分字符串指定的版本號。爲此我使用的是基於以下boost::regex
代碼:
string str_modem_fw_version_number = "";
string str_regex("ATI3\r\nv(\d+[.]\d+)\r\nOK\r\n");
boost::regex patt;
try
{
patt.assign(str_regex);
boost::cmatch what;
if (boost::regex_match(str_reply.c_str(), sc_what, patt)) {
str_modem_fw_version_number = string(sc_what[1].first,sc_what[1].second);
}
}
catch (const boost::regex_error& e)
{
cout << e.what() << endl;
}
以上不工作 - 我可以看到字符串我回來是正確的,但我相信我做一些明顯的錯誤與CR和NL正則表達式中的字符。 我也試過不上一個主題工作
string str_regex("ATI3.*(\d+[.]\d+).*");
string str_regex("ATI3\\r\\nv(\d+[.]\d+)\\r\\nOK\\r\\n");
和變化以下,但我覺得我必須缺少如何boost::regex
對待NL和CR字符的一些基本信息。我已經瀏覽了boost文檔頁面,但沒有成功,所以我在嘗試使用替代方法來解決問題之前作爲最後的手段。
你看看http://stackoverflow.com/questions/7740435/regex-matching-eol-character-within-a-string – alexbuisson