次の方法で共有


sub_match クラス

サブマッチを記述します。

構文

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

パラメーター

BidIt
サブマッチ用の反復子の型。

解説

このクラス テンプレートは、regex_match または regex_search に対する呼び出しでキャプチャ グループと一致した文字のシーケンスを指定するオブジェクトを表します。 match_results Class 型のオブジェクトは、検索に使用された正規表現内のキャプチャ グループごとに 1 つずつ、これらのオブジェクトの配列を保持します。

キャプチャ グループが一致しなかった場合、オブジェクトのデータ メンバー matched が false を保持し、2 つの反復子 firstsecond (基本 std::pairから継承) が等しくなります。 キャプチャ グループが一致した場合は、 matched が true を保持し、反復子 first がキャプチャ グループと一致したターゲット シーケンスの最初の文字を指し、反復子 second がキャプチャ グループと一致したターゲット シーケンスの最後の文字の 1 つ先の位置を指します。 長さ 0 の一致の場合、メンバー matched は true を保持し、2 つの反復子は等しく、両方とも一致の位置を指します。

長さ 0 の一致は、キャプチャ グループが 1 つのアサーションのみまたは 0 回の繰り返しが許可される 1 つの繰り返しのみで構成されている場合に発生します。 次に例を示します。

"^" は、ターゲット シーケンス "a" と一致します。キャプチャ グループ 0 に対応する sub_match オブジェクトは、両方がシーケンスの最初の文字を指す反復子を保持します。

"b(a*)b" は、ターゲット シーケンス "bb" と一致します。キャプチャ グループ 1 に対応する sub_match オブジェクトは、両方がシーケンスの 2 つ目の文字を指す反復子を保持します。

Typedefs

型名 説明
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 で終わる比較対象のシーケンス。

解説

1 つ目のメンバー関数は、一致するシーケンス [first, second) と一致したシーケンス [right.first, right.second) とを比較します。 2 つ目のメンバー関数は、一致するシーケンス [first, second) と文字シーケンス [right.begin(), right.end()) とを比較します。 3 つ目のメンバー関数は、一致するシーケンス [first, second) と文字シーケンス [right, right + std::char_traits<value_type>::length(right)) とを比較します。

各関数から返される値は次のとおりです。

負の値。一致するシーケンス内の最初に異なる値が、オペランド シーケンス内の対応する要素よりも小さい場合 (std::char_traits<value_type>::compare で判断)、または両者のプレフィックスが共通していても、ターゲット シーケンスの方が長い場合は、負の値が返されます。

ゼロ。両者の要素がすべて等しく、長さも同じである場合は、ゼロが返されます。

正の値。それ以外の場合は、正の値が返されます。

sub_match::d ifference_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;

解説

メンバー関数は、一致するシーケンスの長さを返します。または、一致するシーケンスが存在しない場合、0 を返します。

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