[英]Boost regex does not match
我做了一個python正則表達式,現在我應該用C ++編寫程序。
相應的人告訴我要使用boost的正則表達式。
它應該匹配一組至少一個到80個較低的字母數字字符,包括下划線,然后是反斜杠,然后匹配另一組至少一個到80個較低的字母數字字符,再次包括一個下划線和最后但並非最不重要的問號。 總字符串長度必須至少為1個字符,並且不能超過256個字符。
這是我的python正則表達式:
^((?P<grp1>[a-z0-9_]{1,80})/(?P<grp2>[a-z0-9_]{1,80})([?])){1,256}$
我當前的boost正則表達式是:
^(([a-z0-9_]{1,80})\/([a-z0-9_]{1,80})([?])){1,256}$
基本上,我的代碼如下所示:
boost::cmatch match;
bool isMatch;
boost::regex myRegex = "^(([a-z0-9_]{1,80})\/([a-z0-9_]{1,80})([?])){1,256}$";
isMatch = boost::regex_match(str.c_str(), match, myRegex);
編輯:哎呀,完全忘記了問題xDD。 我的問題很簡單:盡管正則表達式不符合要求。
匹配示例為:
最后的要求
總字符串長度必須至少為1個字符,並且不能超過256個字符。
始終為true,因為您的字符串已限制為3到162個字符。 您只需要保留正則表達式的第一部分:
^[a-z0-9_]{1,80}/[a-z0-9_]{1,80}\?$
我的g ++給我警告“未知轉義序列:'\\ /'”; 這意味着您應該使用“ \\\\ /”而不是“ \\ /”。 您需要在字符串中存儲一個反斜杠字符,然后讓正則表達式解析器將其用作轉義觸發器。
順便說一句,我的提升也需要構造函數調用,所以
boost::regex myRegex("^(([a-z0-9_]{1,80})\\\\/([a-z0-9_]{1,80})([?])){1,256}$");
似乎工作。
您還可以使用C ++ 11原始字符串文字來避免C ++轉義:
boost::regex myRegex(R"(^(([a-z0-9_]{1,80})\\/([a-z0-9_]{1,80})([?])){1,256}$)");
順便說一句,歡迎在libstdc ++ svn中測試<regex>
。 它應該隨GCC 4.9一起提供;)
實際錯誤是客戶端在輸入相應的字符串后,將new line
發送給服務器,稍后將進行比較。
有趣的是,錯誤根源很少出現在您期望的位置。
無論如何,謝謝大家的回答。 他們使我能夠清理正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.