C++ Boost Regex 不保存捕获

Posted

技术标签:

【中文标题】C++ Boost Regex 不保存捕获【英文标题】:C++ Boost Regex doesn't save capture 【发布时间】:2015-06-03 18:36:41 【问题描述】:

我正在尝试与网页通信,检索它的源代码,然后在输出文件中搜索和存储特定字符串(名称)。 这是我所做的:

    #include <iostream>
#include <string>
#include <conio.h>
#include <boost/asio.hpp>
#include <boost/regex.hpp>
#include <fstream>
using namespace std;
ofstream o("out.txt");
int main()

    boost::asio::ip::tcp::iostream s("www.lolsummoners.com", "http");
    if(!s)
        cout << "Could not connect to http://www.lolsummoners.com/\n";
    s  << "GET /ladders/eune HTTP/1.1\r\n"
       << "Host: www.lolsummoners.com\r\n"
       << "Accept: */*\r\n"
       << "Connection: close\r\n\r\n" ;
       boost::regex rgx("/leagues/.*>(.+\\s*)</a></td>");
    for(string line; getline(s, line); )
    
        boost::smatch matches;
        if(regex_search(line, matches, rgx ) )
        
            o << matches[0] << '\n';
        
    

问题是,在我的输出文件中,它没有保存捕获,而是保存了整个内容:

/leagues/eune/64657">Kenachi</a></td>

我只希望它保存"Kenachi" 没有“

【问题讨论】:

这与C无关。 【参考方案1】:

matches[0] 是整个匹配的表达式。

第一个捕获组在matches[1]

【讨论】:

以上是关于C++ Boost Regex 不保存捕获的主要内容,如果未能解决你的问题,请参考以下文章

Boost Regex 提供空白捕获

在 C++ 中使用 boost:regex_error 时未定义符号?

在阻塞 boost c++ 方法中,如何在 Python 中捕获中断信号?

如何仅获取给定的捕获组 <regex> c++

如何在 python 中捕获异常(在 C++ 中引起)

如何使用Boost.Asio读取WHOLE char类型捕获的数据