目录
#include
 • .:换行符以外的任何字符
 • […]:…字符中的任何一个
 • [^…]:…字符之外的任何一个
 • [[:charclass:]]:指定之字符类charclass中的一个
 • \n, \t, \f, \r, \v:换行符,tab符号,还有。。。
 • \xhh, \uhhh:一个十六进制字符或unicode字符
 • \d, \D:一个数字,一个非数字
 • \s, \S:一个空白字符,一个非空白字符
 • \w, \W:一个字母,数字,下划线;不是字母,数字,下划线
 • *:匹配0次或多次
 • ?:0次或一次
 • +:至少一次
 • {n}:n次
 • {n, }:至少n次
 • {n, m}:至少n次,至多m次
 • (…):设定分组
 • \1, \2, \3:第n个分组
 • ^:一行的起点
 • $:一行的终点
 一个正则表达式的语法是否正确是在运行时解析的
一个对象:match_results对象:
 • match_results是个template,C++标准库提供了若干预定义的实例化实现:
 ○ smatch:匹配string
 ○ cmatch:匹配const char*
 ○ wsmatch:匹配wstring
 ○ wcmatch:匹配wcstring
 
• sub_match对象m[n],所有sub_match对象都派生自pair<>, first是第一个字符的位置,second成员是最末字符的下一个位置
	○ 一个sub_match对象m[0],表示匹配合格的所有字符
	○ 一个prefix(), 第一个匹配合格的字符前方所有字符
	○ 一个suffix(), 最后一个匹配合格的字符后方的所有字符
	○ size():匹配到的子对象的个数
	○ 捕获组可以以m[n] 访问
• match_results对象作为一个整体,提供了:
	○ str():
		§ 匹配合格的整体string,str()或str(0)
		§ 第n个匹配合格的substring,str(n)
		§ 如果不存在这样的string则返回空
	○ length()
		§ 匹配合格的整体字符串长度,length()或length(0)
		§ 第n个匹配合格的子字符串长度,length(n)
	○ position():
		§ 匹配合格的整体字符串的位置:position()或position(0)
		§ 第n个匹配合格的子字符串位置:position(n)
	○ begin()/cbegin()/end()/cend():可用来迭代匹配的子对象,从m[0]到m[n]
 
两个迭代器:
 正则表达式迭代器:regex_iterator, sregex_iterator,为了注意迭代正则查找的所有匹配成果
 sregex_iterator pos(data.cbegin(), data.cend(), reg);
 sregex_iterator end;
 for(; pos != end; ++pos){
 cout << "match: " << pos->str() << endl;
 cout << " tag: " << pos->str(1) << endl;
 cout << "value: " << pos->str(2) << endl;
 }
 Regex Token Iterator:处理子序列之间的内容,特别是打算将string拆分成一个个语汇单元,regex_token_iterator<>就提供了这样的功能
三个函数:
 regex_match:检验是否整个字符序列匹配某个正则表达式,,返回true
 regex_search:检验是否部分字符序列匹配某个正则表达式,搜索全部,但只输出第一个匹配到的,返回true
 regex_replace
 2.这些函数的参数:
 (seq, m, r, mft)/(seq, r, mft)
 3.指定regex对象:
 对象:
 • regex r(re 【,f】):re可以为string,一个表示字符范围的迭代器对,一个指向空字符结尾的字符数组的指针,一个字符指针,一个计数器,一个花括号包围的字符列表,f是指出对象如何处理的标识,默认为ECMAScript
 • r1=re
 • r1.assign(re, f)
 • r.mark_count()
 • f.flags()
异常:
 如果正则表达式存在错误,在运行时标准库会抛出一个类型为regex_error的异常:
 • what:描述发生了什么错误
 • code:



















