Мультилинейное регулярное выражение в переполнении стека

На самом деле, я пытаюсь найти регулярное выражение в многострочной строке, но я думаю, что я нахожу неправильный способ найти следующее регулярное выражение после новой строки (равно ‘\ n’). Вот мое регулярное выражение:

#include <iostream>
#include <fstream>
#include <sstream>
#include <regex>

#define USE ".*[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}.*(?:\\n)*"
int                     main(int argc, char **argv)
{
std::stringstream     stream;
std::filebuf          *buffer;
std::fstream          fs;
std::string           str;
std::regex            regex(USE);

if (argc != 2)
{
std::cerr << "Think to the use !" << std::endl;
return (-1);
}
fs.open(argv[1]);
if (fs)
{
stream << (buffer = fs.rdbuf());
str = stream.str();
if (std::regex_match(str, regex))
std::cout << "Yes" << std::endl;
else
std::cout << "No" << std::endl;
fs.close();
}
return (0);
}

0

Решение

Есть несколько флагов, которые могут быть указаны при создании объекта регулярного выражения, см.
документация http://en.cppreference.com/w/cpp/regex/basic_regex для деталей.

Краткий рабочий пример с флагом regex :: extended, где в строке поиска указан символ новой строки ‘\ n’:

#include <iostream>
#include <regex>

int main(int argc, char **argv)
{
std::string str = "Hello, world! \n This is new line 2 \n and last one 3.";
std::string regex = ".*2.*\n.*3.*";
std::regex reg(regex, std::regex::extended);

std::cout << "Input: " << str << std::endl;

if(std::regex_match(str, reg))
std::cout << "Match" << std::endl;
else
std::cout << "NOT match" << std::endl;

return 0;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]