Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

regex_token_iterator

Boost , Boost.Regex 5.1.2 , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Класс шаблона regex_token_iterator является адаптером итератора; то есть он представляет новый вид существующей последовательности итераторов, перечисляя все случаи регулярного выражения в этой последовательности и представляя одну или несколько последовательностей символов для каждого найденного матча. Каждая позиция, перечисленная итератором, представляет собой объект sub_match, который представляет то, что соответствовало конкретному субвыражению в обычном выражении. Когда класс regex_token_iterator используется для перечисления одной суб-экспрессии с индексом -1, то итератор выполняет разделение поля: то есть он перечисляет одну последовательность символов для каждой секции последовательности символов, которая не соответствует обычному описанию.

template <class BidirectionalIterator,
         class charT = iterator_traits<BidirectionalIterator>::value_type,
         class traits = regex_traits<charT> >
class regex_token_iterator
{
public:
   typedef          basic_regex<charT, traits>                              regex_type;
   typedef          sub_match<BidirectionalIterator>                        value_type;
   typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type;
   typedef          const value_type*                                       pointer;
   typedef          const value_type&                                       reference;
   typedef          std::forward_iterator_tag                               iterator_category;
   regex_token_iterator();
   regex_token_iterator(BidirectionalIterator a,
                        BidirectionalIterator b,
                        const regex_type& re,
                        int submatch = 0,
                        match_flag_type m = match_default);
   regex_token_iterator(BidirectionalIterator a,
                        BidirectionalIterator b,
                        const regex_type& re,
                        const std::vector<int>& submatches,
                        match_flag_type m = match_default);
   template <std::size_t N>
   regex_token_iterator(BidirectionalIterator a,
                        BidirectionalIterator b,
                        const regex_type& re,
                        const int (&submatches)[N],
                        match_flag_type m = match_default);
   regex_token_iterator(const regex_token_iterator&);
   regex_token_iterator& operator=(const regex_token_iterator&);
   bool operator==(const regex_token_iterator&)const;
   bool operator!=(const regex_token_iterator&)const;
   const value_type& operator*()const;
   const value_type* operator->()const;
   regex_token_iterator& operator++();
   regex_token_iterator operator++(int);
};
typedef regex_token_iterator<const char*>                   cregex_token_iterator;
typedef regex_token_iterator<std::string::const_iterator>   sregex_token_iterator;
#ifndef BOOST_NO_WREGEX
typedef regex_token_iterator<const wchar_t*>                wcregex_token_iterator;
typedef regex_token_iterator<<std::wstring::const_iterator> wsregex_token_iterator;
#endif
template <class charT, class traits>
regex_token_iterator<const charT*, charT, traits>
   make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         int submatch = 0,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA>
regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         int submatch = 0,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, std::size_t N>
regex_token_iterator<const charT*, charT, traits>
make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         const int (&submatch)[N],
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA, std::size_t N>
regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         const int (&submatch)[N],
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits>
regex_token_iterator<const charT*, charT, traits>
   make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         const std::vector<int>& submatch,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA>
regex_token_iterator<
      typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         const std::vector<int>& submatch,
         regex_constants::match_flag_type m = regex_constants::match_default);
Description
regex_token_iterator();

Эффекты: конструирует конец секвениратора.

regex_token_iterator(BidirectionalIterator a,
                     BidirectionalIterator b,
                     const regex_type& re,
                     int submatch = 0,
                     match_flag_type m = match_default);

Условия: !re.пустая(). Объект re должен существовать на протяжении всего срока эксплуатации итератора, построенного из него.

Эффекты: конструирует regex_token_iterator, который будет перечислять одну строку для каждого регулярного выражения совпадения выражения re, найденного в последовательности [a,b), используя флаги матчей m<> (см. match_flag_type). Перечисленная строка - это подвыражение submatch для каждого найденного матча; если submatch является -1, то перечисляет все текстовые последовательности, которые не соответствовали экспрессии re (то есть выполняют разделение поля).

Throws: std::runtime_error если сложность сопоставления выражения с строкой N начинает превышать O(N2), или если программа выходит из стека пространства при сопоставлении выражения (если Boost). Regex настроена в рекурсивном режиме), или если спикер исчерпал свое разрешенное распределение памяти (если увеличить. Regex настроен в нерекурсивном режиме).

regex_token_iterator(BidirectionalIterator a,
                     BidirectionalIterator b,
                     const regex_type& re,
                     const std::vector<int>& submatches,
                     match_flag_type m = match_default);

Условия: submatches.размер() && !re.пустое(). Объект re должен существовать для срока службы построенного из него итератора.

Эффекты: конструкции regex_token_iterator submatches.размер() строки для каждого регулярного выражения совпадают с выражением re, найденным в последовательности [a,b), с использованием флагов матчей m (см. m_flag_type). Для каждого матча будет перечислена одна строка для каждого индекса подвыражения, содержащегося в векторе подвечек; если submatches[0] является -1, то первая строка, перечисленная для каждого матча, будет весь текст от конца последнего матча до начала текущего матча, кроме того, будет одна дополнительная строка, перечисленная, когда не будет найдено больше матчей: от конца последнего найденного матча до конца основной последовательности.

Throws: std::runtime_error если сложность сопоставления выражения с строкой N начинает превышать O(N2), или если программа выходит из стека пространства при сопоставлении выражения (если Boost). Regex настроена в рекурсивном режиме), или если спикер исчерпал свое разрешенное распределение памяти (если увеличить. Regex настроен в нерекурсивном режиме).

template <std::size_t N>
regex_token_iterator(BidirectionalIterator a,
                     BidirectionalIterator b,
                     const regex_type& re,
                     const int (&submatches)[R],
                     match_flag_type m = match_default);

Условия: !re.пустая(). Объект re должен существовать на протяжении всего срока эксплуатации итератора, построенного из него.

Эффекты: конструирует regex_token_iterator, который будет перечислять R строки для каждого регулярного выражения совпадают с выражением re, найденным в последовательности [a,b), используя флаги матчей m (см. match_flag_type). Для каждого матча будет перечислена одна строка для каждого индекса подвыражения, содержащегося в подписи массив; если подписи<335>[0<335>] является -1, то первая строка, перечисленная для каждого матча, будет весь текст от конца последнего матча до начала текущего матча, кроме того, будет одна дополнительная строка, перечисленная, когда не будет найдено больше матчей: от конца последнего найденного матча, до конца основной последовательности.

Throws: std::runtime_error если сложность сопоставления выражения с строкой N начинает превышать O(N2), или если программа выходит из стека пространства при сопоставлении выражения (если Boost). Regex настроена в рекурсивном режиме), или если спикер исчерпал свое разрешенное распределение памяти (если увеличить. Regex настроен в нерекурсивном режиме).

regex_token_iterator(const regex_token_iterator& that);

Следы: строит копию что.

Почтовые условия: *это == это.

regex_token_iterator& operator=(const regex_token_iterator& that);

Effects: sets * this to be equal to that.

Почтовые условия: *это == это.

bool operator==(const regex_token_iterator&)const;

Effects: возвраты верны, если *это такое же положение, как что.

bool operator!=(const regex_token_iterator&)const;

Следы: возврат !(*это == это).

const value_type& operator*()const;

Следы: возвращает текущую последовательность символов.

const value_type* operator->()const;

Effects: returns &(*This).

regex_token_iterator& operator++();

Effects: Перемещается в следующую последовательность символов, которые будут перечислены.

Throws: std::runtime_error если сложность сопоставления выражения с строкой N начинает превышать O(N2), или если программа выходит из стека пространства при сопоставлении выражения (если Boost). Regex настроена в рекурсивном режиме), или если спикер исчерпал свое разрешенное распределение памяти (если увеличить. Regex настроен в нерекурсивном режиме).

Возвращения: *это.

regex_token_iterator& operator++(int);

Эффекты: конструирует результат копии *<37>это, затем вызывает ++(*это).

Возвращения: результат.

template <class charT, class traits>
regex_token_iterator<const charT*, charT, traits>
   make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         int submatch = 0,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA>
regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         int submatch = 0,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, std::size_t N>
regex_token_iterator<const charT*, charT, traits>
make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         const int (&submatch)[N],
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA, std::size_t N>
regex_token_iterator<
      typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         const int (&submatch)[N],
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits>
regex_token_iterator<const charT*, charT, traits>
   make_regex_token_iterator(
         const charT* p,
         const basic_regex<charT, traits>& e,
         const std::vector<int>& submatch,
         regex_constants::match_flag_type m = regex_constants::match_default);
template <class charT, class traits, class ST, class SA>
regex_token_iterator<
      typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>
   make_regex_token_iterator(
         const std::basic_string<charT, ST, SA>& p,
         const basic_regex<charT, traits>& e,
         const std::vector<int>& submatch,
         regex_constants::match_flag_type m = regex_constants::match_default);

Эффекты: возвратит regex_token_iterator, который перечисляет один 6>sub_match для каждого значения в submatch для каждого случая регулярного выражения e в строке p, сопоставлено с >>.

Examples

Следующий пример берет строку и разделяет ее на ряд токенов:

#include <iostream>
#include <boost/regex.hpp>
using namespace std;
int main(int argc)
{
   string s;
   do{
      if(argc == 1)
      {
         cout << "Enter text to split (or \"quit\" to exit): ";
         getline(cin, s);
         if(s == "quit") break;
      }
      else
         s = "This is a string of tokens";
      boost::regex re("\\s+");
      boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);
      boost::sregex_token_iterator j;
      unsigned count = 0;
      while(i != j)
      {
         cout << *i++ << endl;
         count++;
      }
      cout << "There were " << count << " tokens found." << endl;
   }while(argc == 1);
   return 0;
}

Следующий пример берет html-файл и выводит список всех связанных файлов:

#include <fstream>
#include <iostream>
#include <iterator>
#include <boost/regex.hpp>
boost::regex e("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"",
               boost::regex::normal | boost::regbase::icase);
void load_file(std::string& s, std::istream& is)
{
   s.erase();
   //
   // attempt to grow string buffer to match file size,
   // this doesn't always work...
   s.reserve(is.rdbuf()->in_avail());
   char c;
   while(is.get(c))
   {
      // use logarithmic growth strategy, in case
      // in_avail (above) returned zero:
      if(s.capacity() == s.size())
         s.reserve(s.capacity() * 3);
      s.append(1, c);
   }
}
int main(int argc, char** argv)
{
   std::string s;
   int i;
   for(i = 1; i < argc; ++i)
   {
      std::cout << "Findings URL's in " << argv[i] << ":" << std::endl;
      s.erase();
      std::ifstream is(argv[i]);
      load_file(s, is);
      boost::sregex_token_iterator i(s.begin(), s.end(), e, 1);
      boost::sregex_token_iterator j;
      while(i != j)
      {
         std::cout << *i++ << std::endl;
      }
   }
   //
   // alternative method:
   // test the array-literal constructor, and split out the whole
   // match as well as $1....
   //
   for(i = 1; i < argc; ++i)
   {
      std::cout << "Findings URL's in " << argv[i] << ":" << std::endl;
      s.erase();
      std::ifstream is(argv[i]);
      load_file(s, is);
      const int subs[] = {1, 0,};
      boost::sregex_token_iterator i(s.begin(), s.end(), e, subs);
      boost::sregex_token_iterator j;
      while(i != j)
      {
         std::cout << *i++ << std::endl;
      }
   }
   return 0;
}

PrevUpHomeNext

Статья regex_token_iterator раздела Boost.Regex 5.1.2 Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:03:27/0.02947211265564/1