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 つの反復子 first
と second
(基本 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
のシノニムです。