Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/regex/match results"

From cppreference.com
< cpp‎ | regex
(LWG2184, no need for dr list)
(c -> c/core.)
Line 3: Line 3:
 
{{dcl begin}}
 
{{dcl begin}}
 
{{dcl header|regex}}
 
{{dcl header|regex}}
{{dcl | num=1| since=c++11 | 1=
+
{{dcl|num=1|since=c++11|1=
 
template<
 
template<
 
     class BidirIt,
 
     class BidirIt,
Line 19: Line 19:
 
{{dcl end}}
 
{{dcl end}}
  
The class template {{lc|std::match_results}} holds a collection of character sequences that represent the result of a regular expression match.
+
The class template {{|std::match_results}} holds a collection of character sequences that represent the result of a regular expression match.
  
 
This is a specialized allocator-aware container.  It can only be default created, obtained from {{lc|std::regex_iterator}}, or modified by {{lc|std::regex_search}} or {{lc|std::regex_match}}. Because {{tt|std::match_results}} holds {{lc|std::sub_match}}es, each of which is a pair of iterators into the original character sequence that was matched, it's undefined behavior to examine {{tt|std::match_results}} if the original character sequence was destroyed or iterators to it were invalidated for other reasons.
 
This is a specialized allocator-aware container.  It can only be default created, obtained from {{lc|std::regex_iterator}}, or modified by {{lc|std::regex_search}} or {{lc|std::regex_match}}. Because {{tt|std::match_results}} holds {{lc|std::sub_match}}es, each of which is a pair of iterators into the original character sequence that was matched, it's undefined behavior to examine {{tt|std::match_results}} if the original character sequence was destroyed or iterators to it were invalidated for other reasons.
  
The first {{tt|sub_match}} (index 0) contained in a {{tt|match_result}} always represents the full match within a target sequence made by a regex, and subsequent {{tt|sub_match}}es represent sub-expression matches corresponding in sequence to the left parenthesis delimiting the sub-expression in the regex.
+
The first {{|sub_match}} (index 0) contained in a {{tt|match_result}} always represents the full match within a target sequence made by a regex, and subsequent {{|sub_match}}es represent sub-expression matches corresponding in sequence to the left parenthesis delimiting the sub-expression in the regex.
  
 
{{tt|std::match_results}} meets the requirements of a {{named req|AllocatorAwareContainer}} and of a {{named req|SequenceContainer}}, except that only copy assignment, move assignment, and operations defined for a constant containers are supported, and that the semantics of comparison functions are different from those required for a container.
 
{{tt|std::match_results}} meets the requirements of a {{named req|AllocatorAwareContainer}} and of a {{named req|SequenceContainer}}, except that only copy assignment, move assignment, and operations defined for a constant containers are supported, and that the semantics of comparison functions are different from those required for a container.
Line 29: Line 29:
 
===Type requirements===
 
===Type requirements===
 
{{par begin}}
 
{{par begin}}
{{par req named | BidirIt | BidirectionalIterator}}
+
{{par req named|BidirIt|BidirectionalIterator}}
{{par req named | Alloc | Allocator}}
+
{{par req named|Alloc|Allocator}}
 
{{par end}}
 
{{par end}}
  
Line 39: Line 39:
 
{{dsc header | regex}}
 
{{dsc header | regex}}
 
{{dsc hitem | Type | Definition}}
 
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|std::cmatch}} | {{c|std::match_results<const char*>}}}}
+
{{dsc | {{tt|std::cmatch}} | {{c|std::match_results<const char*>}}}}
{{dsc | {{tt|std::wcmatch}} | {{c|std::match_results<const wchar_t*>}}}}
+
{{dsc | {{tt|std::wcmatch}} | {{c|std::match_results<const wchar_t*>}}}}
{{dsc | {{tt|std::smatch}} | {{c|std::match_results<std::string::const_iterator>}}}}
+
{{dsc | {{tt|std::smatch}} | {{c|std::match_results<std::string::const_iterator>}}}}
{{dsc | {{tt|std::wsmatch}} | {{c|std::match_results<std::wstring::const_iterator>}}}}
+
{{dsc | {{tt|std::wsmatch}} | {{c|std::match_results<std::wstring::const_iterator>}}}}
{{dsc | {{tt|std::pmr::cmatch}} {{mark c++17}} | {{c|std::pmr::match_results<const char*>}}}}
+
{{dsc | {{tt|std::pmr::cmatch}} {{mark c++17}} | {{c|std::pmr::match_results<const char*>}}}}
{{dsc | {{tt|std::pmr::wcmatch}} {{mark c++17}}| {{c|std::pmr::match_results<const wchar_t*>}}}}
+
{{dsc | {{tt|std::pmr::wcmatch}} {{mark c++17}}| {{c|std::pmr::match_results<const wchar_t*>}}}}
{{dsc | {{tt|std::pmr::smatch}} {{mark c++17}}| {{c|std::pmr::match_results<std::string::const_iterator>}}}}
+
{{dsc | {{tt|std::pmr::smatch}} {{mark c++17}}| {{c|std::pmr::match_results<std::string::const_iterator>}}}}
{{dsc | {{tt|std::pmr::wsmatch}} {{mark c++17}}| {{c|std::pmr::match_results<std::wstring::const_iterator>}}}}
+
{{dsc | {{tt|std::pmr::wsmatch}} {{mark c++17}}| {{c|std::pmr::match_results<std::wstring::const_iterator>}}}}
 
{{dsc end}}
 
{{dsc end}}
  
Line 52: Line 52:
 
{{dsc begin}}
 
{{dsc begin}}
 
{{dsc hitem | Member type | Definition}}
 
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|allocator_type}} | {{c|Allocator}}}}
+
{{dsc | {{tt|allocator_type}} | {{|Allocator}}}}
{{dsc | {{tt|value_type}} | {{c|std::sub_match<BidirIt>}}}}
+
{{dsc | {{tt|value_type}} | {{c|std::sub_match<BidirIt>}}}}
{{dsc | {{tt|const_reference}} | {{c|const value_type&}}}}
+
{{dsc | {{tt|const_reference}} | {{c|const value_type&}}}}
{{dsc | {{tt|reference}} | {{c|value_type&}}}}
+
{{dsc | {{tt|reference}} | {{|value_type&}}}}
{{dsc | {{tt|const_iterator}} | ''implementation defined'' (depends on the underlying container)}}
+
{{dsc | {{tt|const_iterator}} | ''implementationdefined'' (depends on the underlying container)}}
{{dsc | {{tt|iterator}} | {{c|const_iterator}}}}
+
{{dsc | {{tt|iterator}} | {{|const_iterator}}}}
{{dsc | {{tt|difference_type}} | {{c|std::iterator_traits<BidirIt>::difference_type}}}}
+
{{dsc | {{tt|difference_type}} | {{c|std::iterator_traits<BidirIt>::difference_type}}}}
{{dsc | {{tt|size_type}} | {{c|std::allocator_traits<Alloc>::size_type}}}}
+
{{dsc | {{tt|size_type}} | {{c|std::allocator_traits<Alloc>::size_type}}}}
{{dsc | {{tt|char_type}} | {{c|std::iterator_traits<BidirIt>::value_type}}}}
+
{{dsc | {{tt|char_type}} | {{c|std::iterator_traits<BidirIt>::value_type}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string<char_type>}}}}
+
{{dsc | {{tt|string_type}} | {{c|std::basic_string<char_type>}}}}
 
{{dsc end}}
 
{{dsc end}}
  
Line 105: Line 105:
 
{{dsc end}}
 
{{dsc end}}
  
[[de:cpp/regex/match results]]
+
deesfritjakoptruzh
[[es:cpp/regex/match results]]
+
[[fr:cpp/regex/match results]]
+
[[it:cpp/regex/match results]]
+
[[ja:cpp/regex/match results]]
+
[[ko:cpp/regex/match results]]
+
[[pt:cpp/regex/match results]]
+
[[ru:cpp/regex/match results]]
+
[[zh:cpp/regex/match results]]
+

Revision as of 00:28, 3 April 2023

 
 
 
Regular expressions library
Classes
(C++11)
match_results
(C++11)
Algorithms
Iterators
Exceptions
Traits
Constants
(C++11)
Regex Grammar
 
 
Defined in header <regex>
template<

    class BidirIt,
    class Alloc = std::allocator<std::sub_match<BidirIt>>

> class match_results;
(1) (since C++11)
namespace pmr {

    template <class BidirIt>
    using match_results = std::match_results<BidirIt,
                              std::pmr::polymorphic_allocator<
                                  std::sub_match<BidirIt>>>;

}
(2) (since C++17)

The class template std::match_results holds a collection of character sequences that represent the result of a regular expression match.

This is a specialized allocator-aware container. It can only be default created, obtained from std::regex_iterator, or modified by std::regex_search or std::regex_match. Because std::match_results holds std::sub_matches, each of which is a pair of iterators into the original character sequence that was matched, it's undefined behavior to examine std::match_results if the original character sequence was destroyed or iterators to it were invalidated for other reasons.

The first std::sub_match (index 0) contained in a std::match_result always represents the full match within a target sequence made by a regex, and subsequent std::sub_matches represent sub-expression matches corresponding in sequence to the left parenthesis delimiting the sub-expression in the regex.

std::match_results meets the requirements of a AllocatorAwareContainer and of a SequenceContainer, except that only copy assignment, move assignment, and operations defined for a constant containers are supported, and that the semantics of comparison functions are different from those required for a container.

Contents

Type requirements

-
BidirIt must meet the requirements of LegacyBidirectionalIterator.
-
Alloc must meet the requirements of Allocator.

Specializations

Several specializations for common character sequence types are provided:

Defined in header <regex>
Type Definition
std::cmatch std::match_results<const char*>
std::wcmatch std::match_results<const wchar_t*>
std::smatch std::match_results<std::string::const_iterator>
std::wsmatch std::match_results<std::wstring::const_iterator>
std::pmr::cmatch (C++17) std::pmr::match_results<const char*>
std::pmr::wcmatch (C++17) std::pmr::match_results<const wchar_t*>
std::pmr::smatch (C++17) std::pmr::match_results<std::string::const_iterator>
std::pmr::wsmatch (C++17) std::pmr::match_results<std::wstring::const_iterator>

Member types

Member type Definition
allocator_type Allocator
value_type std::sub_match<BidirIt>
const_reference const value_type&
reference value_type&
const_iterator implementation-defined (depends on the underlying container)
iterator const_iterator
difference_type std::iterator_traits<BidirIt>::difference_type
size_type std::allocator_traits<Alloc>::size_type
char_type std::iterator_traits<BidirIt>::value_type
string_type std::basic_string<char_type>

Member functions

constructs the object
(public member function) [edit]
destructs the object
(public member function) [edit]
assigns the contents
(public member function) [edit]
returns the associated allocator
(public member function) [edit]
State
checks if the results are available
(public member function)
Size
checks whether the match was successful
(public member function) [edit]
returns the number of matches in a fully-established result state
(public member function) [edit]
returns the maximum possible number of sub-matches
(public member function) [edit]
Element access
returns the length of the particular sub-match
(public member function) [edit]
returns the position of the first character of the particular sub-match
(public member function) [edit]
returns the sequence of characters for the particular sub-match
(public member function) [edit]
returns specified sub-match
(public member function) [edit]
returns sub-sequence between the beginning of the target sequence and the beginning of the full match
(public member function) [edit]
returns sub-sequence between the end of the full match and the end of the target sequence
(public member function) [edit]
Iterators
returns iterator to the beginning of the list of sub-matches
(public member function) [edit]
returns iterator to the end of the list of sub-matches
(public member function) [edit]
Format
formats match results for output
(public member function) [edit]
Modifiers
swaps the contents
(public member function) [edit]

Non-member functions

(removed in C++20)
lexicographically compares the values in the two match result
(function template) [edit]
specializes the std::swap algorithm
(function template) [edit]