251 lines
7.7 KiB
Markdown
251 lines
7.7 KiB
Markdown
[re.submatch]
|
||
|
||
# 28 Text processing library [[text]](./#text)
|
||
|
||
## 28.6 Regular expressions library [[re]](re#submatch)
|
||
|
||
### 28.6.8 Class template sub_match [re.submatch]
|
||
|
||
#### [28.6.8.1](#general) General [[re.submatch.general]](re.submatch.general)
|
||
|
||
[1](#general-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10835)
|
||
|
||
Class template sub_match denotes the sequence of characters matched
|
||
by a particular marked sub-expression[.](#general-1.sentence-1)
|
||
|
||
namespace std {template<class BidirectionalIterator>class sub_match : public pair<BidirectionalIterator, BidirectionalIterator> {public:using value_type =typename iterator_traits<BidirectionalIterator>::value_type; using difference_type =typename iterator_traits<BidirectionalIterator>::difference_type; using iterator = BidirectionalIterator; using string_type = basic_string<value_type>; bool matched; constexpr sub_match();
|
||
|
||
difference_type length() const; operator string_type() const;
|
||
string_type str() const; int compare(const sub_match& s) const; int compare(const string_type& s) const; int compare(const value_type* s) const; void swap(sub_match& s) noexcept(*see below*); };}
|
||
|
||
#### [28.6.8.2](#members) Members [[re.submatch.members]](re.submatch.members)
|
||
|
||
[ð](#lib:sub_match,constructor)
|
||
|
||
`constexpr sub_match();
|
||
`
|
||
|
||
[1](#members-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10878)
|
||
|
||
*Effects*: Value-initializes the pair base class subobject and the membermatched[.](#members-1.sentence-1)
|
||
|
||
[ð](#lib:sub_match,length)
|
||
|
||
`difference_type length() const;
|
||
`
|
||
|
||
[2](#members-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10890)
|
||
|
||
*Returns*: matched ? distance(first, second) : 0[.](#members-2.sentence-1)
|
||
|
||
[ð](#lib:operator_basic_string,sub_match)
|
||
|
||
`operator string_type() const;
|
||
`
|
||
|
||
[3](#members-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10901)
|
||
|
||
*Returns*: matched ? string_type(first, second) : string_type()[.](#members-3.sentence-1)
|
||
|
||
[ð](#lib:sub_match,str)
|
||
|
||
`string_type str() const;
|
||
`
|
||
|
||
[4](#members-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10912)
|
||
|
||
*Returns*: matched ? string_type(first, second) : string_type()[.](#members-4.sentence-1)
|
||
|
||
[ð](#lib:sub_match,compare)
|
||
|
||
`int compare(const sub_match& s) const;
|
||
`
|
||
|
||
[5](#members-5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10923)
|
||
|
||
*Returns*: str().compare(s.str())[.](#members-5.sentence-1)
|
||
|
||
[ð](#lib:sub_match,compare_)
|
||
|
||
`int compare(const string_type& s) const;
|
||
`
|
||
|
||
[6](#members-6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10934)
|
||
|
||
*Returns*: str().compare(s)[.](#members-6.sentence-1)
|
||
|
||
[ð](#lib:sub_match,compare__)
|
||
|
||
`int compare(const value_type* s) const;
|
||
`
|
||
|
||
[7](#members-7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10945)
|
||
|
||
*Returns*: str().compare(s)[.](#members-7.sentence-1)
|
||
|
||
[ð](#lib:sub_match,swap)
|
||
|
||
`void swap(sub_match& s) noexcept(see below);
|
||
`
|
||
|
||
[8](#members-8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10956)
|
||
|
||
*Preconditions*: BidirectionalIterator meets
|
||
the *Cpp17Swappable* requirements ([[swappable.requirements]](swappable.requirements "16.4.4.3 Swappable requirements"))[.](#members-8.sentence-1)
|
||
|
||
[9](#members-9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10961)
|
||
|
||
*Effects*: Equivalent to:this->pair<BidirectionalIterator, BidirectionalIterator>::swap(s);
|
||
std::swap(matched, s.matched);
|
||
|
||
[10](#members-10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10969)
|
||
|
||
*Remarks*: The exception specification is equivalent tois_nothrow_swappable_v<BidirectionalIterator>[.](#members-10.sentence-1)
|
||
|
||
#### [28.6.8.3](#op) Non-member operators [[re.submatch.op]](re.submatch.op)
|
||
|
||
[1](#op-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10977)
|
||
|
||
Let *SM-CAT*(I) becompare_three_way_result_t<basic_string<typename iterator_traits<I>::value_type>>
|
||
|
||
[ð](#lib:sub_match,operator==)
|
||
|
||
`template<class BiIter>
|
||
bool operator==(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
|
||
`
|
||
|
||
[2](#op-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L10990)
|
||
|
||
*Returns*: lhs.compare(rhs) == 0[.](#op-2.sentence-1)
|
||
|
||
[ð](#lib:sub_match,operator%3c=%3e)
|
||
|
||
`template<class BiIter>
|
||
auto operator<=>(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs);
|
||
`
|
||
|
||
[3](#op-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11002)
|
||
|
||
*Returns*: static_cast<*SM-CAT*(BiIter)>(lhs.compare(rhs) <=> 0)[.](#op-3.sentence-1)
|
||
|
||
[ð](#lib:operator==,sub_match_)
|
||
|
||
`template<class BiIter, class ST, class SA>
|
||
bool operator==(
|
||
const sub_match<BiIter>& lhs,
|
||
const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
|
||
`
|
||
|
||
[4](#op-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11016)
|
||
|
||
*Returns*: lhs.compare(typename sub_match<BiIter>::string_type(rhs.data(), rhs.size())) == 0
|
||
|
||
[ð](#lib:operator%3c=%3e,sub_match_)
|
||
|
||
`template<class BiIter, class ST, class SA>
|
||
auto operator<=>(
|
||
const sub_match<BiIter>& lhs,
|
||
const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);
|
||
`
|
||
|
||
[5](#op-5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11032)
|
||
|
||
*Returns*: static_cast<*SM-CAT*(BiIter)>(lhs.compare(typename sub_match<BiIter>::string_type(rhs.data(), rhs.size()))<=> 0)
|
||
|
||
[ð](#lib:sub_match,operator==__)
|
||
|
||
`template<class BiIter>
|
||
bool operator==(const sub_match<BiIter>& lhs,
|
||
const typename iterator_traits<BiIter>::value_type* rhs);
|
||
`
|
||
|
||
[6](#op-6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11050)
|
||
|
||
*Returns*: lhs.compare(rhs) == 0[.](#op-6.sentence-1)
|
||
|
||
[ð](#lib:sub_match,operator%3c=%3e__)
|
||
|
||
`template<class BiIter>
|
||
auto operator<=>(const sub_match<BiIter>& lhs,
|
||
const typename iterator_traits<BiIter>::value_type* rhs);
|
||
`
|
||
|
||
[7](#op-7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11063)
|
||
|
||
*Returns*: static_cast<*SM-CAT*(BiIter)>(lhs.compare(rhs) <=> 0)[.](#op-7.sentence-1)
|
||
|
||
[ð](#lib:sub_match,operator==___)
|
||
|
||
`template<class BiIter>
|
||
bool operator==(const sub_match<BiIter>& lhs,
|
||
const typename iterator_traits<BiIter>::value_type& rhs);
|
||
`
|
||
|
||
[8](#op-8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11076)
|
||
|
||
*Returns*: lhs.compare(typename sub_match<BiIter>::string_type(1, rhs)) == 0[.](#op-8.sentence-1)
|
||
|
||
[ð](#lib:sub_match,operator%3c=%3e___)
|
||
|
||
`template<class BiIter>
|
||
auto operator<=>(const sub_match<BiIter>& lhs,
|
||
const typename iterator_traits<BiIter>::value_type& rhs);
|
||
`
|
||
|
||
[9](#op-9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11089)
|
||
|
||
*Returns*: static_cast<*SM-CAT*(BiIter)>(lhs.compare(typename sub_match<BiIter>::string_type(1, rhs))<=> 0)
|
||
|
||
[ð](#lib:basic_ostream)
|
||
|
||
`template<class charT, class ST, class BiIter>
|
||
basic_ostream<charT, ST>&
|
||
operator<<(basic_ostream<charT, ST>& os, const sub_match<BiIter>& m);
|
||
`
|
||
|
||
[10](#op-10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L11108)
|
||
|
||
*Returns*: os << m.str()[.](#op-10.sentence-1)
|