Шаблон классаmatch_results обозначает набор последовательностей символов, представляющих результат совпадения регулярного выражения. Хранилище для коллекции выделяется и освобождается по мере необходимости функциями-членами шаблона классаmatch_results.
Шаблон классаmatch_results удовлетворяет требованиям контейнера, поддерживающего распределитель, и контейнера последовательности ([container.requirements.general],[sequence.reqmts]), за исключением того, что поддерживаются только операции, определенные для контейнеров последовательностей, квалифицированных как const, и что семантика функций сравнения отличается от семантики, требуемой для контейнера.
Созданный по умолчаниюmatch_results объект не имеет полностью установленного состояния результата. Результат совпадения - этоready когда, как следствие завершенного совпадения регулярного выражения, изменяющего такой объект, его состояние результата становится полностью установленным. Эффекты вызова большинства функций-членов изmatch_results неготового объекта не определены.
sub_match Объект , хранящийся в индексе 0 представляет подвыражение 0, т.е. весь матч. В этом случаеsub_match член matched всегдаtrue.sub_match Объект , хранящийся в индексеn означает , что совпавший отмеченные суб-выражение вn пределах согласованного выражения. Если подвыражениеn участвовало в совпадении регулярного выражения, тогдаsub_match членmatched оцениваетtrue, и элементыfirst иsecond обозначают диапазон символов, [first, second) которые сформировали это совпадение. В противном случаеmatched этоfalse, и членыfirst иsecond точка в конце последовательности, обыскали. [ Note: Этиsub_match объекты , представляющие различные подвыражения , которые не участвовали в матче регулярного выражения не должны быть различны. ] — end note
namespace std { template <class BidirectionalIterator, class Allocator = allocator<sub_match<BidirectionalIterator>>> class match_results { public: using value_type = sub_match<BidirectionalIterator>; using const_reference = const value_type&; using reference = value_type&; using const_iterator = implementation-defined; using iterator = const_iterator; using difference_type = typename iterator_traits<BidirectionalIterator>::difference_type; using size_type = typename allocator_traits<Allocator>::size_type; using allocator_type = Allocator; using char_type = typename iterator_traits<BidirectionalIterator>::value_type; using string_type = basic_string<char_type>; // [re.results.const], construct/copy/destroy explicit match_results(const Allocator& a = Allocator()); match_results(const match_results& m); match_results(match_results&& m) noexcept; match_results& operator=(const match_results& m); match_results& operator=(match_results&& m); ~match_results(); // [re.results.state], state bool ready() const; // [re.results.size], size size_type size() const; size_type max_size() const; bool empty() const; // [re.results.acc], element access difference_type length(size_type sub = 0) const; difference_type position(size_type sub = 0) const; string_type str(size_type sub = 0) const; const_reference operator[](size_type n) const; const_reference prefix() const; const_reference suffix() const; const_iterator begin() const; const_iterator end() const; const_iterator cbegin() const; const_iterator cend() const; // [re.results.form], format template <class OutputIter> OutputIter format(OutputIter out, const char_type* fmt_first, const char_type* fmt_last, regex_constants::match_flag_type flags = regex_constants::format_default) const; template <class OutputIter, class ST, class SA> OutputIter format(OutputIter out, const basic_string<char_type, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const; template <class ST, class SA> basic_string<char_type, ST, SA> format(const basic_string<char_type, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const; string_type format(const char_type* fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const; // [re.results.all], allocator allocator_type get_allocator() const; // [re.results.swap], swap void swap(match_results& that); }; }
Во всехmatch_results конструкторах копияAllocator аргумента должна использоваться для любого выделения памяти, выполняемого конструктором или функциями-членами в течение времени существования объекта.
match_results(const Allocator& a = Allocator());
match_results(const match_results& m);
match_results(match_results&& m) noexcept;
match_results& operator=(const match_results& m);
match_results& operator=(match_results&& m);
Элемент | Ценить |
ready() | m.ready() |
size() | m.size() |
str(n) | m.str(n) для всех целых чиселn < m.size() |
prefix() | m.prefix() |
suffix() | m.suffix() |
(*this)[n] | m[n] для всех целых чиселn < m.size() |
length(n) | m.length(n) для всех целых чиселn < m.size() |
position(n) | m.position(n) для всех целых чиселn < m.size() |
bool ready() const;
size_type size() const;
Returns: Один плюс количество отмеченных подвыражений в регулярном выражении, которое было сопоставлено, если*this представляет результат успешного сопоставления. В противном случае возвращается0. [ Note: Состояниеmatch_results объекта можно изменить, только передав этот объект вregex_match илиregex_search. Разделы[re.alg.match] и[re.alg.search] укажите влияние этих алгоритмов на ихmatch_results аргументы. ] — end note
size_type max_size() const;
bool empty() const;
difference_type length(size_type sub = 0) const;
difference_type position(size_type sub = 0) const;
string_type str(size_type sub = 0) const;
const_reference operator[](size_type n) const;
Returns: Ссылка наsub_match объект, представляющий последовательность символов, которая соответствует отмеченному подвыражениюn. Еслиn == 0 затем возвращает ссылку наsub_match объект, представляющий последовательность символов, совпадающую со всем регулярным выражением. Если n >= size() затем возвращаетsub_match объект, представляющий несогласованное подвыражение.
const_reference prefix() const;
Returns: Ссылка наsub_match объект, представляющий последовательность символов от начала строки, в которой выполняется поиск / поиск, до начала найденного совпадения.
const_reference suffix() const;
Returns: Ссылка наsub_match объект, представляющий последовательность символов от конца найденного совпадения до конца строки, в которой выполняется поиск.
const_iterator begin() const;
const_iterator cbegin() const;
const_iterator end() const;
const_iterator cend() const;
template <class OutputIter>
OutputIter format(
OutputIter out,
const char_type* fmt_first, const char_type* fmt_last,
regex_constants::match_flag_type flags = regex_constants::format_default) const;
Requires:ready() == true иOutputIter должен удовлетворять требованиям для Output Iterator.
Effects: Копирует последовательность символов[fmt_first, fmt_last) в OutputIterout. Заменяет каждый спецификатор формата или escape-последовательность в скопированном диапазоне либо символом (ами), который он представляет, либо последовательностью символов,*this к которой он относится. Битовые маски, указанные в,flags определяют, какие спецификаторы формата и управляющие последовательности распознаются.
template <class OutputIter, class ST, class SA>
OutputIter format(
OutputIter out,
const basic_string<char_type, ST, SA>& fmt,
regex_constants::match_flag_type flags = regex_constants::format_default) const;
template <class ST, class SA>
basic_string<char_type, ST, SA> format(
const basic_string<char_type, ST, SA>& fmt,
regex_constants::match_flag_type flags = regex_constants::format_default) const;
Effects: Создает пустую строкуresult типаbasic_string<char_type, ST, SA> и вызывает:
format(back_inserter(result), fmt, flags);
string_type format(
const char_type* fmt,
regex_constants::match_flag_type flags = regex_constants::format_default) const;
Effects: Создает пустую строкуresult типаstring_type и вызывает:
format(back_inserter(result), fmt, fmt + char_traits<char_type>::length(fmt), flags);
allocator_type get_allocator() const;
void swap(match_results& that);
Postconditions:*this содержит последовательность совпадающих подвыражений, которые были вthat,that содержит последовательность совпадающих подвыражений, которые были в*this.
template <class BidirectionalIterator, class Allocator>
void swap(match_results<BidirectionalIterator, Allocator>& m1,
match_results<BidirectionalIterator, Allocator>& m2);
template <class BidirectionalIterator, class Allocator>
bool operator==(const match_results<BidirectionalIterator, Allocator>& m1,
const match_results<BidirectionalIterator, Allocator>& m2);
Returns: true если ни один из результатов матча не готов,false если готов один результат матча, а другой - нет. Если готовы оба результата совпадения, возвращается,true только если:
m1.empty() && m2.empty(), или
!m1.empty() && !m2.empty(), и выполняются следующие условия:
m1.prefix() == m2.prefix(),
m1.size() == m2.size() && equal(m1.begin(), m1.end(), m2.begin()), а также
m1.suffix() == m2.suffix().
[ Note: Алгоритмequal определен в п[algorithms]. ] — end note
template <class BidirectionalIterator, class Allocator>
bool operator!=(const match_results<BidirectionalIterator, Allocator>& m1,
const match_results<BidirectionalIterator, Allocator>& m2);