Для облегчения преобразования строки MFC/ATL в<regex_iterator
>или<regex_token_iterator
>предоставляются следующие вспомогательные функции:
template <class charT>
regex_iterator<charT const*>
make_regex_iterator(
const ATL::CSimpleStringT<charT>& s,
const basic_regex<charT>& e,
::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default);
Эффекты: возвращение<regex_iterator(s.GetString(),s.GetString()+s.GetLength(),
e,
f);
>
Пример:
void enumerate_links(const CString& html)
{
boost::tregex r(
__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+"
"(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*"
"(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"));
boost::tregex_iterator i(boost::make_regex_iterator(html, r)), j;
while(i != j)
{
std::cout << (*i)[1] << std::endl;
++i;
}
}
template <class charT>
regex_token_iterator<charT const*>
make_regex_token_iterator(
const ATL::CSimpleStringT<charT>& s,
const basic_regex<charT>& e,
int sub = 0,
::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default);
Эффекты: возвращение<regex_token_iterator(s.GetString(),s.GetString()+s.GetLength(),
e,
sub,
f);
>
template <class charT>
regex_token_iterator<charT const*>
make_regex_token_iterator(
const ATL::CSimpleStringT<charT>& s,
const basic_regex<charT>& e,
const std::vector<int>& subs,
::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default);
Эффекты: возврат<regex_token_iterator(s.GetString(),s.GetString()+s.GetLength(),
e,
subs,
f);
>
template <class charT, std::size_t N>
regex_token_iterator<charT const*>
make_regex_token_iterator(
const ATL::CSimpleStringT<charT>& s,
const basic_regex<charT>& e,
const int (& subs)[N],
::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default);
Эффекты: возврат<regex_token_iterator(s.GetString(),s.GetString()+s.GetLength(),
e,
subs,
f);
>
Пример:
void enumerate_links2(const CString& html)
{
boost::tregex r(
__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+"
"(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*"
"(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"));
boost::tregex_token_iterator i(boost::make_regex_token_iterator(html, r, 1)), j;
while(i != j)
{
std::cout << *i << std::endl;
++i;
}
}