sub_match 類別
描述子相符項目。
語法
template <class BidIt>
class sub_match
: public std::pair<BidIt, BidIt>
參數
BidIt
子相符項目的迭代器類型。
備註
類別範本描述物件,指定符合呼叫 regex_match 或 regex_search擷取群組的字元序列。 類型為 match_results 類別的物件會保存這些物件的陣列,每個陣列分別代表用於搜尋之規則運算式中的一個擷取群組。
如果擷取群組不符合對象的數據成員 matched
會保留 false,且兩個反覆運算器和 first
second
(繼承自基底 std::pair
) 相等。 如果擷取群組相符,則 matched
為 true,迭代器 first
會指向目標序列中符合擷取群組的第一個字元,而 second
會指向目標序列中符合擷取群組之最後一個字元後的一個位置。 對於長度為零的比對,成員 matched
會保留 true,兩個反覆運算器會相等,而且兩者都會指向相符專案的位置。
當擷取群組只包含一個判斷提示,或包含一個允許重複零的重複項目時,可能會發生零長度相符的情況。 例如:
"^" 與目標序列 "a" 相符;對應至擷取群組 0 的 sub_match
物件會保存同時指向序列中第一個字元的兩個迭代器。
"b(a*)b" 與目標序列 "bb" 相符;對應至擷取群組 1 的 sub_match
物件會保存同時指向序列中第二個字元的兩個迭代器。
Typedefs
類型名稱 | 描述 |
---|---|
difference_type | 迭代器差值的類型。 |
iterator | 迭代器的類型。 |
value_type | 元素的類型。 |
成員函式
成員函數 | 描述 |
---|---|
compare | 比較子相符項目與序列。 |
length | 傳回子相符項目的長度。 |
匹配 | 指出比對是否成功。 |
str | 將子對應轉換成字串。 |
操作員
運算子 | 描述 |
---|---|
運算子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
需求
Header:<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::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;
備註
成員函式會傳回相符序列的長度,如果沒有相符序列則傳回零。
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
的同義字。