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


另见