C ++ std :: regex使用前瞻失败

时间:2018-10-13 22:41:39

标签: c++ regex std

我需要从磁盘解析一个txt文件。因此,我首先举一个例子来测试正则表达式。

这是我的示例代码:

std::string txt("paragraph:\r\nthis is the text file\r\ni need only this data\r\nnotthis");
std::smatch m;
std::regex rt("paragraph:([\\S\\s](?=notthis))");
std::regex_search(txt, m, rt);

std::cout << m.str(1) << std::endl;

因此,我尝试解析到notthis,但返回的匹配m是失败的匹配。如果我这样进行正则表达式:std::regex rt("paragraph:([\\S\\s]+)");可以正常工作,但是我得到了全文:

this is the text file
i need only this data
notthis

我以前没有使用过很多正则表达式,但是有人告诉我c ++使用ecmascript语法,但是在文档中,前瞻模式似乎是相同的,并且仅不支持lookbehinds。如何在电子书稿中进行前瞻?

1 个答案:

答案 0 :(得分:1)

用法如下:

#include <iostream>
#include <string>
#include <regex>

int main()
{
std::string txt("paragraph:\r\nthis is the text file\r\ni need only this data\r\nnotthis");
std::smatch m;
std::regex rt("paragraph:([\\S\\s]+(?=notthis))");
std::regex_search(txt, m, rt);

std::cout << m.str(1) << std::endl;
}