1. smatch允许获得匹配的上下文
匹配类型有两个名为 prefix 和 suffix的成员, 分别返回表示输入序列中当前匹配之前和之后部分的 SSub_matCh 对象。
一个ssub_match 对象有两个名为 str 和 length 的成员, 分别返回匹配的 string 和该string 的大小
// 显示出匹配单词的上下文
// 循环头与之前一样
for (sregex_iterator it(file.begin(), file.end(), r), end_it; it != end_it; ++it)
{
auto pos = it->prefix().length(); // 前缀的大小
pos = pos > 40 ? pos - 40 : 0; // 我们想要最多40个字符
cout << it->prefix().str().substr(pos) // 前缀的最后一部分
<< " >>> " << it->str() << " <<suffix().str().substr(0, 40) // 后缀的第一部分
<< endl;
}
这些操作也适用于cmatch、wsmatch、wcmatch和对应的csub_match、wssub_match和wcsub_match
| match操作 | 解释 |
|---|---|
| m.ready() | 如果已经通过调用regex_search或regex_match设置了m,则返回true;否则返回false。如果ready返回false,则对m进行操作是未定义的 |
| m.size() | 如果匹配失败,则返回0;否则返回最近一次匹配的正则表达式中子表达式的数目 |
| m.empty() | 若m.size()为0,则返回true |
| m.prefix() | 一个ssub_match对象,表示当前匹配之前的序列 |
| m.suffix() | 一个ssub_match对象,表示当前匹配之后的部分 |
| —— | 在接受一个索引的操作中,n的默认值为0且必须小于m.size()。 |
| —— | 第一个子匹配(索引为0)表示整个匹配。 |
| m.length(n) | 第n个匹配的子表达式的大小 |
| m.position(n) | 第n个子表达式据序列开始的距离 |
| m.str(n) | 第n个子表达式匹配的string |
| m[n] | 对应第n个子表达式的ssub_match对象 |
| m.begin(), m.end() or m.cbegin(), m.cend() | 表示m中sub_match元素范围的迭代器。与往常一样,cbegin()和cend()返回const_iterator |



