还有就是一大堆的比较操作符的重载了,这里就不多说了。
l match_results
match_results相当于sub_match的容器,用于表示正则式算法的返回结果。
template <class BidirectionalIterator,
class Allocator = allocator<sub_match<BidirectionalIterator> >
class match_results;
typedef match_results<const char*> cmatch;
typedef match_results<const wchar_t*> wcmatch;
typedef match_results<string::const_iterator> smatch;
typedef match_results<wstring::const_iterator> wsmatch;
声明很简单,有四个特化可以直接使用,不过要注意string和char*字符串使用的match_results是不同的。
成员函数:
m.size()
容量。
m.max_size()
最大容量。
m.empty()
容量是否为0。
m[n]
第n个元素,即sub_match
m.prefix()
返回代表前缀的sub_match,前缀指字符串的开头到第一个匹配的开头。
m.suffix()
返回代表后缀的sub_match,后缀之最后一个匹配的结尾到字符串的结尾。
m.length(n)
返回第n个元素的长度,即m[n].size()。
m.position(n)
返回第n个元素的位置。
cout<<m
流输出,输出整个匹配,相当于cout<<m[0]。因为第0个元素是整个匹配,详细情况请看下面的解释。
m.format(fmtstr)
使用格式化字符串,格式化结果,返回字符串
m.format(fmtstr,flags)
使用格式化字符串,格式化结果,返回字符串,flags是格式化选项。
m.format(out,fmtstr)
同上,但是使用输出迭代器输出结果。
m.format(out.fmtstr,flags)
同上,但是使用输出迭代器输出结果。
迭代器:
smatch::iterator
迭代器,常迭代器
smatch::const_iterator
同上
m.begin()
返回常迭代器
m.end()
同上
最后,说一个实例
我处理一个文本
实际值/-20.031,-1.896,-2.861,-1,0,0
提取其中的数字
regex exp("\s*实际值/(- [0-9.]+),(- [0-9.]+),(- [0-9.]+),(- [0-9.]+),(- [0-9.]+),(- [0-9.]+)$");
大家看看还有没有更好的写法?