我想在c ++中获取href的值,但我的代码没有给出所需的结果
#include <fstream>
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::regex url("/.*(href=')(.*)('>)/");
std::string url_test = "hjsh.ppt";
std::ifstream file("in.txt");
if (!file.is_open())
{
std::cerr << "Failed to open file!\n";
return -1;
}
const std::string needle = "href";
while (std::getline(file, url_test))
{
if (url_test.find(needle) != std::string::npos)
{
if(regex_match(url_test, url)){}
std::cout << url_test << "\n";
}
}
}
以上代码将整行打印为
<a href="11_custom_io.ppt">Ch11: Customizing I/O</a>
我只想要11_custom_io.ppt,该文件的名称。 请帮助。
答案 0 :(得分:0)
正如评论中已经提到的,使用正则表达式解析XML或HTML并不是一个好主意。但是如果你想获得子匹配,那么你可以使用std::match_results。例如:
std::string line("<a href='11_custom_io.ppt'>Ch11: Customizing I/O</a>");
std::regex re("href='(.*)'>");
std::smatch match;
if ( std::regex_search(line, match, re) ) {
std::cout << "sub-match " << match[1].str() << '\n';
}
输出将是:sub-match 11_custom_io.ppt