public member function
<regex>

std::basic_regex::assign

(1)
basic_regex& assign (const basic_regex& rgx);
(2)
basic_regex& assign (basic_regex&& rgx) noexcept;
(3)
basic_regex& assign (const charT* str, flag_type flags = ECMAScript);
(4)
basic_regex& assign (const charT* str, size_t len, flag_type flags = ECMAScript);
(5)
template <class ST, class SA>  basic_regex& assign (const basic_string<charT,ST,SA>& str, flag_type flags = ECMAScript);
(6)
template <class InputIterator>  basic_regex& assign (InputIterator first, InputIterator last, flag_type f = ECMAScript);
(7)
basic_regex& assign (initializer_list<charT> il, flag_type flags = ECMAScript);
指定正則表示式
將新的正則表示式(模式)賦值給該物件,覆蓋任何先前的值。

對於版本(1)和(2),物件獲取rgx的語法選項標誌。 對於其他版本,語法標誌可以指定為最後一個引數。

如果字元序列中使用的語法存在語法錯誤,則此成員函式會丟擲regex_error異常。

引數

rgx
相同型別的另一個basic_regex物件。
str
具有要用作正則表示式的模式的字串。
charT是第一個類模板引數(字元型別)。
標誌
用於解釋正則表示式的標誌。
可以組合這些常量中的一個或多個(使用按位OR運算子,|)以形成型別為flag_type的有效位掩碼值

flag*對語法的影響備註
icase不區分大小寫正則表示式匹配時忽略大小寫。
nosubs沒有子表示式要放回的字元的match_results結構體將不包含子表示式匹配。
optimize最佳化匹配匹配效率優先於構造正則表示式物件的效率。
collate區域設定敏感字元範圍,例如"[a-b]",受區域設定的影響。
ECMAScriptECMAScript語法正則表示式遵循這些語法之一。
需要設定這六個語法標誌中的一個(且僅一個),才能使位掩碼具有有效值。
預設情況下,選擇ECMAScript
basic基本POSIX語法
extended擴充套件POSIX語法
awkAwk POSIX語法
grepGrep POSIX語法
egrepEgrep POSIX語法
* 這些位掩碼標誌名稱是basic_regex的成員常量。 它們也可以作為全域性常量在std::regex_constants名稱空間下使用(有關更多詳細資訊,請參見regex_constants)。
flag_type是成員型別,定義為位掩碼型別regex_constants::syntax_option_type的別名。
len
字串str的長度,其中str是字元陣列,不一定是空終止的。
size_t 是一個無符號整數型別。
first, last
前向迭代器,指向字元範圍中的初始和最終位置。 使用的範圍是[first,last),其中包括firstlast之間的所有字元,包括first指向的字元,但不包括last指向的字元。
函式模板型別可以是任何型別的字元前向迭代器
il
字元的initializer_list。 這些物件是從初始化列表宣告符自動構造的。

返回值

*this

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// basic_regex::assign
// note: using regex, a standard alias of basic_regex<char>
#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string pattern ("six");
  std::regex first;
  std::regex second (pattern);


  first.assign (second);
  second.assign ("[0-9A-F]+", std::regex::ECMAScript);
  second.assign ({'^','a'}, std::regex::ECMAScript | std::regex::icase );

  using namespace std::regex_constants;                // introducing constants 
  second.assign (pattern, ECMAScript | icase );

  std::string subject = "Sixty six";
  std::string replacement = "seven";

  std::cout << "first: " << std::regex_replace (subject, first, replacement);
  std::cout << std::endl;

  std::cout << "second: " << std::regex_replace (subject, second, replacement);
  std::cout << std::endl;

  return 0;
}

輸出
first: Sixty seven
second: seventy seven


另見