sub_match 类

介绍子匹配项。

语法

template <class BidIt>
class sub_match
    : public std::pair<BidIt, BidIt>

参数

BidIt
子匹配项的迭代器类型。

备注

这个类模板描述指定字符序列的对象,该字符序列与调用 regex_matchregex_search 的捕获组匹配。 match_results Class 类型的对象保存这些对象的数组,每个数组用于搜索中所用正则表达式中的每个捕获组。

如果捕获组不匹配,则对象的数据成员 matched 保持为 false,两个迭代器 firstsecond(继承自基类 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的同义词。

另请参阅

<regex>
sub_match