std::regex_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_iterator
является доступной только для чтения ForwardIterator
, которые обращаются отдельные матчи регулярного выражения в основной последовательности символов.Оригинал:
std::regex_iterator
is a read-only ForwardIterator
that accesses the individual matches of a regular expression within the underlying character sequence.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
На строительство, и на каждый шаг, он вызывает std::regex_search и запоминает результат (то есть, сохраняет копию значения std::match_results<BidirIt>). Первый объект может быть прочитано, когда итератор построен или при появлении первых разыменования сделано. В противном случае, разыменование только возвращает копию недавно получил матч регулярного выражения.
Оригинал:
On construction, and on every increment, it calls std::regex_search and remembers the result (that is, saves a copy of the value std::match_results<BidirIt>). The first object may be read when the iterator is constructed or when the first dereferencing is done. Otherwise, dereferencing only returns a copy of the most recently obtained regex match.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
По-умолчанию
std::regex_iterator
это конец последовательности итератор. Когда действительный std::regex_iterator
увеличивается после достижения последнего матча (std::regex_search возвращается false), становится равным конца последовательности итератор. Разыменование или увеличивая его дальнейшего вызывает неопределенное поведение.Оригинал:
The default-constructed
std::regex_iterator
is the end-of-sequence iterator. When a valid std::regex_iterator
is incremented after reaching the last match (std::regex_search returns false), it becomes equal to the end-of-sequence iterator. Dereferencing or incrementing it further invokes undefined behavior.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Типичная реализация
std::regex_iterator
имеет начала и конца итераторы для базовой последовательности (два экземпляра BidirIt), указатель на регулярное выражение (const regex_type*) и матч флагов (std::regex_constants::match_flag_type), и текущий матч (std::match_results<BidirIt>).Оригинал:
A typical implementation of
std::regex_iterator
holds the begin and the end iterators for the underlying sequence (two instances of BidirIt), a pointer to the regular expression (const regex_type*) and the match flags (std::regex_constants::match_flag_type), and the current match (std::match_results<BidirIt>).Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Тип требованиям
-BidirIt должен соответствовать требованиям BidirectionalIterator .
|
[править] Специализации
Несколько специализаций для распространенных типов последовательность символов определены
Оригинал:
Several specializations for common character sequence types are defined:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Заголовочный файл
<regex> | |
Тип | Definition |
cregex_iterator
|
regex_iterator<const char*> |
wcregex_iterator
|
regex_iterator<const wchar_t*> |
sregex_iterator
|
regex_iterator<std::string::const_iterator> |
wsregex_iterator
|
regex_iterator<std::wstring::const_iterator> |
[править] Типы-члены
Тип члена | Определение |
value_type
|
std::match_results<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_iterator Оригинал: constructs a new regex_iterator Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
(destructor) (объявлено неявно) |
destructs a regex_iterator, including the cached value (public функция-член) |
заменяет regex_iterator Оригинал: replaces a regex_iterator Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
сравнивает два regex_iterators Оригинал: compares two regex_iterators Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
получает ссылку на текущий match accesses члена текущем матче Оригинал: obtains a reference to the current match accesses a member of the current match Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) | |
авансы regex_iterator на следующий матч Оригинал: advances the regex_iterator to the next match Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (public функция-член) |
[править] Заметки
В обязанности программиста для того, чтобы std::basic_regex объект, переданный в конструктор итератора переживет итератор. Поскольку итератор хранит указатель на регулярных выражений, увеличивая итератора после регулярных выражений была разрушена обращается к болтающейся указатель.
Оригинал:
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 pointer to the regex, incrementing the iterator after the regex was destroyed accesses a dangling pointer.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если часть регулярного выражения, которые соответствовали только утверждение (
^
, $
, \b
, \B
), матч хранятся в итератор нулевой длины матча, то есть, match[0].first == match[0].second.Оригинал:
If the part of the regular expression that matched is just an assertion (
^
, $
, \b
, \B
), the match stored in the iterator is a zero-length match, that is, match[0].first == match[0].second.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Пример
#include <regex> #include <iterator> #include <iostream> int main() { const std::string text = "Quick brown fox."; std::regex re("[^\\s]+"); auto beg = std::sregex_iterator(text.begin(), text.end(), re); auto end = std::sregex_iterator(); std::cout << "The number of words is " << std::distance(beg, end) << '\n'; }
Вывод:
The number of words is 3
[править] См. также
(C++11) |
идентифицирует один регулярного выражения, в том числе все части выражения матчей Оригинал: identifies one regular expression match, including all sub-expression matches Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (шаблон класса) |
(C++11) |
проверить, если регулярное выражение встречается в любом месте строки Оригинал: check if a regular expression occurs anywhere within a string Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (шаблон функции) |