簡體   English   中英

Boost正則表達式不匹配

[英]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。 我的問題很簡單:盡管正則表達式不符合要求。

匹配示例為:

  • 多一點?
  • 對象/值?
  • devel42 / version_number?

最后的要求

總字符串長度必須至少為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM