size_type size() const;
概要
*this
が保持しているサブマッチの数を返す。
戻り値
*this
が成功したマッチの結果を保持している場合、マッチした正規表現のキャプチャグループ(カッコで囲まれた部分)の数に 1 を加えた数。
そうでなければ 0。
備考
prefix
、および、suffix
で返されるオブジェクトもsub_match
型ではあるが、これらは本メンバ関数の戻り値の数には含まれていない。- 本メンバ関数は
ready() == false
でも呼び出すことが可能である(その場合、0 が返される)。 - 正規表現
re
に含まれているキャプチャグループの数はre.mark_count()
で取得することができる。
したがって、成功したマッチの結果を保持している場合には、size() == 1 + re.mark_count()
となっている。
1 が加えられる理由は、正規表現全体にマッチした部分をサブマッチとして保持しているためである。
なお、失敗したマッチの結果を保持している場合には、使用した正規表現に含まれているキャプチャグループの数によらずにsize() == 0
である。
例
#include <iostream>
#include <regex>
int main()
{
const char s1[] = " abc 012 def ";
const char s2[] = " 012 abc 345 ";
const std::regex re("(\\d+) (\\w+) (\\d+)");
std::cout << std::boolalpha << "mark_count = " << re.mark_count() << std::endl;
std::cmatch m;
// regex_search 実行前
std::cout << "ready = " << m.ready() << ", size = " << m.size() << std::endl;
// regex_search 実行後(マッチ失敗)
if (std::regex_search(s1, m, re)) {
std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
} else {
std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
}
// regex_search 実行後(マッチ成功)
if (std::regex_search(s2, m, re)) {
std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
} else {
std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
}
}
xxxxxxxxxx
#include <iostream>
#include <regex>
int main()
{
const char s1[] = " abc 012 def ";
const char s2[] = " 012 abc 345 ";
const std::regex re("(\\d+) (\\w+) (\\d+)");
std::cout << std::boolalpha << "mark_count = " << re.mark_count() << std::endl;
std::cmatch m;
// regex_search 実行前
std::cout << "ready = " << m.ready() << ", size = " << m.size() << std::endl;
// regex_search 実行後(マッチ失敗)
if (std::regex_search(s1, m, re)) {
std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
} else {
std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
}
// regex_search 実行後(マッチ成功)
if (std::regex_search(s2, m, re)) {
std::cout << "match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
} else {
std::cout << "not match:ready = " << m.ready() << ", size = " << m.size() << std::endl;
}
}
出力
mark_count = 3
ready = false, size = 0
not match:ready = true, size = 0
match:ready = true, size = 4
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5 ✅, 3.6 ✅
- GCC: 4.9.0 ✅, 4.9.1 ✅, 5.0.0 ✅
- ICC: ??
- Visual C++: ??