sub_match 类
介绍子匹配项。
语法
template <class BidIt>
class sub_match
: public std::pair<BidIt, BidIt>
参数
BidIt
子匹配项的迭代器类型。
备注
这个类模板描述指定字符序列的对象,该字符序列与调用 regex_match 或 regex_search 的捕获组匹配。 match_results Class 类型的对象保存这些对象的数组,每个数组用于搜索中所用正则表达式中的每个捕获组。
如果捕获组不匹配,则对象的数据成员 matched
保持为 false,两个迭代器 first
和 second
(继承自基类 std::pair
)相等。 如果捕获组匹配,则 matched
保持为 true,迭代器 first
指向与捕获组匹配的目标序列中第一个字符,迭代器 second
与捕获组匹配的目标序列中最后一个字符后紧邻的位置。 对于长度为零的匹配项,成员 matched
保持为 true,两个迭代器将相等并将同时指向匹配项的位置。
当捕获组仅由一个断言或一个允许重复次数为零的重复组成时,可能出现长度为零的匹配项。 例如:
“^”匹配目标序列“a”; sub_match
对象对应捕获组 0 持有两个迭代器,它们均指向序列中第一个字符。
“b(a*)b”匹配目标序列“bb”; sub_match
对象对应捕获组 0 持有两个迭代器,它们均指向序列中第二个字符。
Typedef
类型名称 | 说明 |
---|---|
difference_type | 迭代器差异的类型。 |
iterator | 迭代器的类型。 |
value_type | 元素的类型。 |
成员函数
成员函数 | 说明 |
---|---|
compare | 将子匹配项与序列进行比较。 |
length | 返回子匹配项的长度。 |
matched | 指示是否匹配成功。 |
str | 将子匹配转换为字符串。 |
运算符
运算符 | 说明 |
---|---|
operator basic_string<value_type> | 将子匹配转换为字符串。 |
示例
// std__regex__sub_match.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>
int main()
{
std::regex rx("c(a*)|(b)");
std::cmatch mr;
std::regex_search("xcaaay", mr, rx);
std::csub_match sub = mr[1];
std::cout << "matched == " << std::boolalpha
<< sub.matched << std::endl;
std::cout << "length == " << sub.length() << std::endl;
std::csub_match::difference_type dif = std::distance(sub.first, sub.second);
std::cout << "difference == " << dif << std::endl;
std::csub_match::iterator first = sub.first;
std::csub_match::iterator last = sub.second;
std::cout << "range == " << std::string(first, last)
<< std::endl;
std::cout << "string == " << sub << std::endl;
std::csub_match::value_type const *ptr = "aab";
std::cout << "compare(\"aab\") == "
<< sub.compare(ptr) << std::endl;
std::cout << "compare(string) == "
<< sub.compare(std::string("AAA")) << std::endl;
std::cout << "compare(sub) == "
<< sub.compare(sub) << std::endl;
return (0);
}
matched == true
length == 3
difference == 3
range == aaa
string == aaa
compare("aab") == -1
compare(string) == 1
compare(sub) == 0
要求
标头:<regex>
命名空间: std
sub_match::compare
将子匹配项与序列进行比较。
int compare(const sub_match& right) const;
int compare(const basic_string<value_type>& str) const;
int compare(const value_type *ptr) const;
参数
right
要比较的子匹配项。
str
要与之比较的字符串。
ptr
要比较的以 null 结尾的序列。
注解
第一个成员函数将匹配序列 [first, second)
与匹配序列 [right.first, right.second)
进行比较。 第二个成员函数将匹配序列 [first, second)
与字符序列 [right.begin(), right.end())
进行比较。 第三个成员函数将匹配序列 [first, second)
与字符序列 [right, right + std::char_traits<value_type>::length(right))
进行比较。
每个函数的返回结果:
如果匹配序列中的第一个不同值小于操作数序列中的相应元素(如 std::char_traits<value_type>::compare
所确定),或二者前缀相同但目标序列较长,则返回一个负值
如果二者的元素一一对应且长度相同,则返回零
否则返回正值
sub_match::difference_type
迭代器差异的类型。
typedef typename iterator_traits<BidIt>::difference_type difference_type;
注解
typedef 是 iterator_traits<BidIt>::difference_type
的同义词。
sub_match::iterator
迭代器的类型。
typedef BidIt iterator;
备注
typedef 是模板类型参数 Bidit
的同义词。
sub_match::length
返回子匹配项的长度。
difference_type length() const;
备注
如果没有任何匹配的序列,则成员函数返回匹配的序列的长度或零。
sub_match::matched
指示是否匹配成功。
bool matched;
备注
仅当与 true
关联的捕获组是正则表达式匹配的一部分时,成员才保存 *this
。
sub_match::operator basic_string<value_type>
将子匹配转换为字符串。
operator basic_string<value_type>() const;
备注
该成员运算符将返回 str()
。
sub_match::str
将子匹配转换为字符串。
basic_string<value_type> str() const;
注解
成员函数返回 basic_string<value_type>(first, second)
。
sub_match::value_type
元素的类型。
typedef typename iterator_traits<BidIt>::value_type value_type;
备注
typedef 是 iterator_traits<BidIt>::value_type
的同义词。