А boost::regex слабый?
Попробовал составить выражение
Код | list(?:.*?<a .*?href="(.*?)".*?>(.*?)</a>.*?)*?end |
boost::regex выдал следующее:
Код | [0] = 44.txt [1] = 4444 |
а нужно
Код | [0] = 33.txt [1] = 3333 [2] = 44.txt [3] = 4444 |
В чём проблема? Выложу ещё код (может нужно там флаг какой-нибудь установить?)
Код | #include <windows.h> #include <locale> #include <iostream> #include <string> #include <vector> #include <boost/regex.hpp>
const char txt[] = "<a href=\"11.txt\">1111</a>\r\n" "<a href=\"22.txt\">2222</a>\r\n" "list\r\n" "<a href=\"33.txt\">3333</a>\r\n" "<a href=\"44.txt\">4444</a>\r\n" "end\r\n" "<a href=\"55.txt\">5555</a>\r\n" "<a href=\"66.txt\">6666</a>";
void main(int, char**) { setlocale(LC_ALL, "");
try { std::vector<std::string> result;
if(boost::regex_split(std::back_inserter(result), std::string(txt), boost::regex("list(?:.*?<a .*?href=\"(.*?)\".*?>(.*?)</a>.*?)*?end", boost::regex_constants::icase))) { std::cout << "Found " << result.size() << " elements" << std::endl; for(UINT i = 0; i < result.size(); ++i) { std::cout << "[" << i << "] = " << result[i] << std::endl; } } else { std::cout << "Not found" << std::endl; } } catch(std::exception &ex) { std::cout << "EXCEPTION: " << ex.what() << std::endl; }
std::cin.get(); } |
|