如何使用正则表达式在c ++中获取href值?

时间:2017-04-01 13:21:03

标签: c++ regex c++11

我想在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,该文件的名称。 请帮助。

1 个答案:

答案 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