std::regex_token_iterator
Материал из cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
template< class BidirIt, |
(начиная с C++11) | |
std::regex_token_iterator
является доступной только для чтения ForwardIterator
, который обращается к отдельным суб-матчи каждого матча регулярного выражения в основной последовательности символов. Она также может быть использован для доступа к части последовательности, которые не соответствуют заданному регулярному выражению (например, в Tokenizer).Оригинал:
std::regex_token_iterator
is a read-only ForwardIterator
that accesses the individual sub-matches of every match of a regular expression within the underlying character sequence. It can also be used to access the parts of the sequence that were not matched by the given regular expression (e.g. as a tokenizer).Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
На строительство, он строит std::regex_iterator и на каждый шаг он уйдет через просьба к югу от матчей с текущей match_results, увеличивая основной regex_iterator, когда увеличивающиеся от последнего частичное совпадение.
Оригинал:
On construction, it constructs an std::regex_iterator and on every increment it steps through the requested sub-matches from the current match_results, incrementing the underlying regex_iterator when incrementing away from the last submatch.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
По-умолчанию
std::regex_token_iterator
это конец последовательности итератор. Когда действительный std::regex_token_iterator
увеличивается после достижения последнего частичное совпадение последних матча, он становится равным конца последовательности итератор. Разыменование или увеличивая его дальнейшего вызывает неопределенное поведение.Оригинал:
The default-constructed
std::regex_token_iterator
is the end-of-sequence iterator. When a valid std::regex_token_iterator
is incremented after reaching the last submatch of the last match, it becomes equal to the end-of-sequence iterator. Dereferencing or incrementing it further invokes undefined behavior.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Просто, прежде чем стать конца последовательности итератор, std::regex_token_iterator может стать итератор' суффикса, если индекс -1 (не соответствием фрагмент) появляется в списке просил индексы совпадение. Такой итератор, если разыменован, возвращает match_results соответствующее последовательности символов между последним матчем и в конце последовательности.
Оригинал:
Just before becoming the end-of-sequence iterator, a std::regex_token_iterator may become a suffix iterator, if the index -1 (non-matched fragment) appears in the list of the requested submatch indexes. Such iterator, if dereferenced, returns a match_results corresponding to the sequence of characters between the last match and the end of sequence.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Типичная реализация
std::regex_token_iterator
содержит основные std::regex_iterator, контейнер (например, std::vector<int>) запрашиваемых показателей частичное совпадение, внутренний счетчик, равный индексу частичное совпадение, указатель на std::match_results, указывая на текущий частичное совпадение текущего матча, и std::match_results объект, содержащий последние не соответствием последовательности символов (используется в Tokenizer режим).Оригинал:
A typical implementation of
std::regex_token_iterator
holds the underlying std::regex_iterator, a container (e.g. std::vector<int>) of the requested submatch indexes, the internal counter equal to the index of the submatch, a pointer to std::match_results, pointing at the current submatch of the current match, and a std::match_results object containing the last non-matched character sequence (used in tokenizer mode).Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Тип требованиям
-BidirIt должен соответствовать требованиям BidirectionalIterator .
|
[править] Специализации
Несколько специализаций для распространенных типов последовательность символов определены
Оригинал:
Several specializations for common character sequence types are defined:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Заголовочный файл
<regex> | |
Тип | Definition |
cregex_token_iterator
|
regex_token_iterator<const char*> |
wcregex_token_iterator
|
regex_token_iterator<const wchar_t*> |
sregex_token_iterator
|
regex_token_iterator<std::string::const_iterator> |
wsregex_token_iterator
|
regex_token_iterator<std::wstring::const_iterator> |
[править] Типы-члены
Тип члена | Определение |
value_type
|
std::sub_match<BidirIt> |
difference_type
|
std::ptrdiff_t |
pointer
|
const value_type* |
reference
|
const value_type& |
iterator_category
|
std::forward_iterator_tag |
regex_type
|
basic_regex<CharT, Traits> |
[править] Функции-члены
создает новый regex_token_iterator Оригинал: constructs a new regex_token_iterator Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
(destructor) (объявлено неявно) |
destructs a regex_token_iterator, including the cached value (public функция-член) |
заменяет regex_token_iterator Оригинал: replaces a regex_token_iterator Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
сравнивает два regex_token_iterators Оригинал: compares two regex_token_iterators Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
accsses текущего совпадение Оригинал: accsses current submatch Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
авансы regex_token_iterator к следующему совпадение Оригинал: advances the regex_token_iterator to the next submatch Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) |
[править] Заметки
В обязанности программиста для того, чтобы std::basic_regex объект, переданный в конструктор итератора переживет итератор. Поскольку итератор хранит std::regex_iterator, которая хранит указатель на регулярных выражений, увеличивая итератора после регулярных выражений была разрушена приводит к неопределенному поведению.
Оригинал:
It is the programmer's responsibility to ensure that the std::basic_regex object passed to the iterator's constructor outlives the iterator. Because the iterator stores a std::regex_iterator which stores a pointer to the regex, incrementing the iterator after the regex was destroyed results in undefined behavior.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Пример
#include <fstream> #include <iostream> #include <algorithm> #include <iterator> #include <regex> int main() { std::string text = "Quick brown fox."; // tokenization (non-matched fragments) // Note that regex is matched only two times: when the third value is obtained // the iterator is a suffix iterator. std::regex ws_re("\\s+"); // whitespace std::copy( std::sregex_token_iterator(text.begin(), text.end(), ws_re, -1), std::sregex_token_iterator(), std::ostream_iterator<std::string>(std::cout, "\n")); // iterating the first submatches std::string html = "<p><a href=\"http://google.com\">google</a> " "< a HREF =\"http://cppreference.com\">cppreference</a>\n</p>"; std::regex url_re("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", std::regex::icase); std::copy( std::sregex_token_iterator(html.begin(), html.end(), url_re, 1), std::sregex_token_iterator(), std::ostream_iterator<std::string>(std::cout, "\n")); }
Вывод:
Quick brown fox. http://google.com http://cppreference.com