-2

我有一个小问题,不知道如何解决它,因为我对 C++ 不太擅长。:-(

我有一个二进制文件,我想将以下内容提取为 txt 文件。请注意第二个链接中的第 49 行,该行多次显示 1337(这应该是一些分隔符)。我写了一个bashscript来解决这个任务,但我也想用 C++ 来做。

欢迎提出想法和建议!如果您不明白我想知道的内容,请告诉我,以便我更详细地解释我的问题。谢谢您的帮助!

4

2 回答 2

3

好的,我知道这是旧线程,但不久前我遇到了同样的问题,所以我想贡献一下。

根据我的经验,使用 std::regex 解析二进制文件的最简单方法是使用sregex_iterator。但请记住,您将需要一个完全实现 c++11(或至少是正则表达式库)的编译器。我正在使用 GCC 4.9,它适用于正则表达式(我相信 Clang 也适用)。

于 2014-05-10T04:31:47.550 回答
0

您的问题没有具体内容,所以现在我只为您提供一些参考资料。首先是 C++ 正则表达式库,它是 C++11 中的新功能。

http://www.cplusplus.com/reference/regex/

第二个也是我首选的解决方案是 boost 正则表达式库。boost 库非常可靠(大部分),我建议在尽可能多的情况下利用它们,有时甚至在某些 STL 容器上使用它们,但如果性能是一个问题,请在这样做之前进行研究。某些增强扩展容器在某些情况下是不稳定的。下面是 boost 正则表达式库文档的链接。

http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/index.html

我推荐 boost 的原因是 A:它不依赖于 C++11 支持(现在相当标准,但绝不是通用的)和 B:boost 正则表达式库已经存在了一段时间。它非常坚固。

编辑:如何使用 boost 正则表达式库

#include <boost/regex.hpp>
#include <iostream>
#include <string>

using namespace std;
using namespace boost;

int main() {
    regex re("a.*");
    string passString = "asdasdfdasdfa";
    string failString = "babbddssddf";
    cmatch matches; //What this variable does is usually unimportant, read the documentation if you care to know.

    cout << passString << " " << regex_match(passString.c_str(), matches, re) << endl;
    cout << failString << " " << regex_match(failString.c_str(), matches, re) << endl;
}

预期输出:

asdasdfdasdfa 1
babbddssddf 0

在我的机器上使用以下命令构建:

g++ some.cpp -I/opt/local/include  -L/opt/local/lib -lboost_regex-mt -o some

此命令将取决于您如何配置 boost 安装。还有关于为全局匹配进行 regex_search 的详尽文档,在文档页面上,这只是为了让您入门。

于 2013-05-20T16:00:58.457 回答