Как поймать несколько строк в lex - PullRequest
0 голосов
/ 05 марта 2019

Я хочу сделать регулярное выражение для выборки из нескольких строк.Я пытался так:

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

, но у меня это не работает.

Возможный ввод:

some program code SAMPLE_SIGN text inside the 
sample SAMPLE_SIGN

Какая версия подходит для этого?

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

, если вы хотите разрешить это в любой позиции строки, не только начало, тогда не следует использовать ^ и разрешить ваш знак: SAMPLE_SIGN или: | конец строки: \n и послеэто может быть что угодно *

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

Это позволит вам использовать SAMPLE_SIGN в качестве первого символа внутри блока SAMPLE_SIGN и.В качестве примитивного комментария, например.

0 голосов
/ 05 марта 2019

Попробуйте Regex: SAMPLE_SIGN([\S\s]+)(?=SAMPLE_SIGN)

Демо

C ++ Код Демо :

#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 ++

...