首頁 > 後端開發 > C++ > 為什麼 `std::match_results::size()` 對於沒有捕獲組的正規表示式回傳 1?

為什麼 `std::match_results::size()` 對於沒有捕獲組的正規表示式回傳 1?

DDD
發布: 2024-11-05 02:25:01
原創
390 人瀏覽過

Why does `std::match_results::size()` return 1 for a regex without capture groups?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板