• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <regex>

    std::match_results::suffix

    const_reference suffix() const;
    

    概要

    マッチした文字列の後の文字列を指すサブマッチを返す。

    要件

    ready() == true

    戻り値

    マッチした文字列の後の文字列を指すサブマッチ。ただし、マッチが失敗した場合は未規定
    具体的なサブマッチの各メンバ変数の設定内容は以下の通り。

    • regex_match の引数に match_results オブジェクト m を渡した場合、戻り値が true であれば、m.suffix().firstm.suffix().second は共に検索対象文字列の末尾となる。
      また、m.suffix().matchedfalse となる。
      戻り値が false の場合は未規定である。
    • regex_search の引数に match_results オブジェクト m を渡した場合、戻り値が true であれば、m.suffix().firstm[0].second(つまり、マッチした文字列の末尾)と等しくなり、m.suffix().second は検索対象文字列の末尾と等しくなる。
      また、m.suffix().matchedm.suffix().first != m.suffix().second の結果となる(つまり、m.suffix() が空文字であれば false、そうでなければ true)。
      戻り値が false の場合は未規定である。
    • regex_iterator を間接参照したオブジェクトの場合、当該オブジェクトを m とすると、m.suffix().firstm[0].second(つまり、マッチした文字列の末尾)と等しくなり、m.suffix().second は検索対象文字列の末尾と等しくなる。
      また、m.suffix().matchedm.suffix().first != m.suffix().second の結果となる(つまり、m.suffix() が空文字であれば false、そうでなければ true)。

    #include <iostream>
    #include <iterator>
    #include <regex>
    #include <string>
    
    void print(const char* title, const std::ssub_match& sub, const std::string& s)
    {
      std::cout << title << ": str() = '" << sub.str() << "', "
          "range = [" << sub.first - std::begin(s) << ", " << sub.second - std::begin(s) << "), "
          "matched = " << std::boolalpha << sub.matched << std::endl;
    }
    
    int main()
    {
      // regex_match の場合
      std::cout << "regex_match" << std::endl;
      {
        const std::string s = "0123";
        const std::regex re("\\d+");
    
        std::smatch m;
        if (std::regex_match(s, m, re)) {
          print("m[0]", m[0], s);
          print("suffix()", m.suffix(), s);
        } else {
          std::cout << "not match" << std::endl;
        }
      }
      std::cout << std::endl;
    
      // regex_search の場合
      std::cout << "regex_search" << std::endl;
      {
        const std::string s = " abc 0123 defgh ";
        const std::regex re("\\d+");
    
        std::smatch m;
        if (std::regex_search(s, m, re)) {
          print("m[0]", m[0], s);
          print("suffix()", m.suffix(), s);
        } else {
          std::cout << "not match" << std::endl;
        }
      }
      std::cout << std::endl;
    
      // regex_iterator の場合
      std::cout << "regex_iterator" << std::endl;
      {
        const std::string s = "abc 0123";
        const std::regex re("\\w+");
    
        for (std::sregex_iterator it(std::begin(s), std::end(s), re), end; it != end; ++it) {
          auto&& m = *it;
          print("m[0]", m[0], s);
          print("suffix()", m.suffix(), s);
          std::cout << std::endl;
        }
      }
    }
    

    出力

    regex_match
    m[0]: str() = '0123', range = [0, 4), matched = true
    suffix(): str() = '', range = [4, 4), matched = false
    
    regex_search
    m[0]: str() = '0123', range = [5, 9), matched = true
    suffix(): str() = ' defgh ', range = [9, 16), matched = true
    
    regex_iterator
    m[0]: str() = 'abc', range = [0, 3), matched = true
    suffix(): str() = ' 0123', range = [3, 8), matched = true
    
    m[0]: str() = '0123', range = [4, 8), matched = true
    suffix(): str() = '', range = [8, 8), matched = false
    

    バージョン

    言語

    • 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++: ??