...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The following helper functions are provided to ease the conversion from
an MFC/ATL string to a regex_iterator
or 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);
Effects: returns regex_iterator(s.GetString(), s.GetString() + s.GetLength(),
e,
f);
Example:
void enumerate_links(const CString& html) { // enumerate and print all the links in some HTML text, // the expression used is by Andew Lee on www.regxlib.com: 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);
Effects: returns 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);
Effects: returns 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);
Effects: returns regex_token_iterator(s.GetString(), s.GetString() + s.GetLength(),
e,
subs,
f);
Example:
void enumerate_links2(const CString& html) { // enumerate and print all the links in some HTML text, // the expression used is by Andew Lee on www.regxlib.com: 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; } }