std::match_results 的大小
問題:
問題:<code class="cpp">#include <iostream> #include <string> #include <regex> int main() { std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::smatch matches; std::regex_search(haystack, matches, needle); std::cout << matches.size() << std::endl; }</code>
在以下 111 碼中,為什麼matches.size() 回傳1 而不是預期的3?
答案:std::match_results 的 size() 函數傳回捕獲組數加1,表示完全符合。在本例中,沒有捕獲組,因此大小為 1。
說明:regex_search 函數找出輸入中正規表示式的第一次出現細繩。在本例中,它在字串的開頭找到“abc”。 matches 物件包含有關匹配的信息,包括捕獲組。 但是,提供的正規表示式不包含捕獲組。捕獲組是正規表示式中與輸入字串的特定部分相符的括號。如果使用捕獲組,matches.size() 將傳回捕獲組的數量加 1。
尋找多個匹配項:<code class="cpp">int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int i = 0; std::sregex_iterator it(s.begin(), s.end(), r); std::sregex_iterator end; while (it != end) { std::smatch m = *it; std::cout << i++ << ": " << m.str() << std::endl; it++; } return 0; }</code>
0: abc 1: abc 2: abc
以上是為什麼 `std::match_results::size()` 對於沒有捕獲組的正規表示式回傳 1?的詳細內容。更多資訊請關注PHP中文網其他相關文章!