• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <regex>

    std::match_results::size

    size_type size() const;
    

    概要

    *this が保持しているサブマッチの数を返す。

    戻り値

    *this が成功したマッチの結果を保持している場合、マッチした正規表現のキャプチャグループ(カッコで囲まれた部分)の数に 1 を加えた数。
    そうでなければ 0。

    備考

    • prefix、および、suffix で返されるオブジェクトも sub_match 型ではあるが、これらは本メンバ関数の戻り値の数には含まれていない。
    • 本メンバ関数は ready() == false でも呼び出すことが可能である(その場合、0 が返される)。
    • 正規表現 re に含まれているキャプチャグループの数は re.mark_count() で取得することができる。
      したがって、成功したマッチの結果を保持している場合には、size() == 1 + re.mark_count() となっている。
      1 が加えられる理由は、正規表現全体にマッチした部分をサブマッチとして保持しているためである。
      なお、失敗したマッチの結果を保持している場合には、使用した正規表現に含まれているキャプチャグループの数によらずに size() == 0 である。

    #include <iostream>
    #include <regex>
    
    int main()
    {
      const char s1[] = " abc 012 def ";
      const char s2[] = " 012 abc 345 ";
      const std::regex re("(\\d+) (\\w+) (\\d+)");
    
      std::cout << std::boolalpha << "mark_count = " << re.mark_count() << std::endl;
    
      std::cmatch m;
      // regex_search 実行前
      std::cout << "ready = " << m.ready() << ", size = " << m.size() << std::endl;
    
      // regex_search 実行後(マッチ失敗)
      if (std::regex_search(s1, m, re)) {
        std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
      } else {
        std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
      }
    
      // regex_search 実行後(マッチ成功)
      if (std::regex_search(s2, m, re)) {
        std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
      } else {
        std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
      }
    }
    

    出力

    mark_count = 3
    ready = false, size = 0
    not match:ready = true, size = 0
    match:ready = true, size = 4
    

    バージョン

    言語

    • C++11

    処理系

    • Clang: 3.0 , 3.1 , 3.2 , 3.3 , 3.4 , 3.5 , 3.6
    • GCC: 4.9.0 , 4.9.1 , 5.0.0
    • ICC: ??
    • Visual C++: ??