最終更新日時:
が更新

履歴 編集

function
<regex>

std::basic_regex::assign(C++11)

basic_regex& assign(const basic_regex& that);                   // (1)

basic_regex& assign(basic_regex&& that) noexcept;               // (2)

basic_regex& assign(const charT* ptr,
                    flag_type f = regex_constants::ECMAScript); // (3)

basic_regex& assign(const charT* ptr, size_t len,
                    flag_type f = regex_constants::ECMAScript); // (4)

template <class ST, class SA>
basic_regex& assign(const basic_string<charT, ST, SA>& p,
                    flag_type f = regex_constants::ECMAScript); // (5)

template <class InputIterator>
basic_regex& assign(InputIterator first, InputIterator last,
                    flag_type f = regex_constants::ECMAScript); // (6)

basic_regex& assign(initializer_list<charT> il,
                    flag_type f = regex_constants::ECMAScript); // (7)

概要

正規表現オブジェクトを代入する。

要件

  • InputIterator は入力イテレータの要件を満たすこと。

効果

  • (1) that*this にコピーする。
  • (2) that*this にムーブ代入する。
  • (3) assign(string_type(ptr), f) と同等。
  • (4) assign(string_type(ptr, len), f) と同等。
  • (5) 引数 f で指定されたフラグに従って、文字列 p で指定された正規表現を *this に代入する。文字列 p が有効な正規表現で無い場合には、例外 regex_error を投げる。
    例外が投げられた場合、*this は変更されない。
  • (6) assign(string_type(first, last), f) と同等。
  • (7) assign(il.begin(), il.end(), f) と同等。

事後条件

  • (1) flags()mark_count は、それぞれ that.flags()that.mark_count を返す。
  • (2) flags()mark_count は、それぞれ that.flags()that.mark_count の元の値を返す。
    that は未規定の有効な状態である。
  • (3) -
  • (4) -
  • (5) 例外が投げられなければ、flags() は引数 f を、mark_count は指定された正規表現内のキャプチャグループの数を返す。
  • (6) -
  • (7) -

戻り値

*this

備考

  • charTbasic_regex の 1 番目のテンプレートパラメータで、文字型である。
  • string_typetraits_type::string_type の別名で、デフォルトは basic_string<charT> である。
  • traits_typebasic_regex の 2 番目のテンプレートパラメータで、デフォルトは regex_traits<charT> である。
  • flag_typeregex_constants::syntax_option_type の別名である。

#include <iostream>
#include <regex>
#include <string>

int main()
{
  const char s[] = " abc ";
  std::regex re;
  std::cout << std::boolalpha;

  const std::regex re1("\\w+");
  re = re1;                                             // (1) の形式
  std::cout << std::regex_search(s, re) << std::endl;

  re = std::regex("\\d+");                              // (2) の形式
  std::cout << std::regex_search(s, re) << std::endl;

  re = "\\w+";                                          // (3) の形式
  std::cout << std::regex_search(s, re) << std::endl;

  re = { '\\', 'd', '+' };                              // (4) の形式
  std::cout << std::regex_search(s, re) << std::endl;

  const std::string p = "\\w+";
  re = p;                                               // (5) の形式
  std::cout << std::regex_search(s, re) << std::endl;
}

出力

true
false
true
false
true

バージョン

言語

  • C++11

処理系

備考

Clang バージョン 3.0 は initializer_list に対応していないため、(7) の形式は提供されていない。
また、Clang(libc++) では例外が発生した場合に *this が元の状態を保持せずに中途半端に更新されてしまう。

参照