如何在lex中捕获多行

时间:2019-03-04 21:11:20

标签: c++ regex lex

我想为多行示例制作一个正则表达式。 我这样尝试过:

^"SAMPLE_SIGN"."\n".SAMPLE_SIGN\n    std::cout << "MULTIPLE ROW SAMPLE"

但这对我不起作用。

可能的输入:

some program code SAMPLE_SIGN text inside the 
sample SAMPLE_SIGN

正确的版本是什么?

2 个答案:

答案 0 :(得分:0)

如果您想在行的任何位置允许它,不仅开头,而且不应该使用^并允许您使用符号:SAMPLE_SIGN或:|行尾:\n,之后可以是*

"SAMPLE_SIGN"([^SAMPLE_SIGN]|\n)*"SAMPLE_SIGN"  std::cout << "Block"

这将允许您使用SAMPLE_SIGN作为SAMPLE_SIGN和块内的第一个字符。例如,作为原始注释部分。

答案 1 :(得分:-1)

尝试使用正则表达式:SAMPLE_SIGN([\S\s]+)(?=SAMPLE_SIGN)

Demo

C ++代码Demo

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

int main()
{
std::string txt("some program code SAMPLE_SIGN text inside the\r\nsample SAMPLE_SIGN");
std::smatch m;
std::regex rt("SAMPLE_SIGN([\\S\\s]+)(?=SAMPLE_SIGN)");
std::regex_search(txt, m, rt);

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

C++ Code Reference