У меня есть строка, отформатированная следующим образом: постоянногоC++ регулярного выражения для разбора вложенного-структуру
{
First nested string;
{
Second nested string;
}
}
Вложение может быть произвольной глубиной. Каждый подэлемент представляет собой отформатированную закрывающую фигуру, добавляя два пробела к предыдущему уровню вложенности и закрывающей фигурной скобки. Я хочу получить регулярное выражение, позволяющее получать вложенные данные. Например, для приведенного выше примера результат должен быть: «»
First nested string;
{
Second nested string;
}
Я написал следующий код, который позволяет анализировать строки только в одной строке, как символ любой символ, кроме новой строки.
regex regEx("\\s*\\{\\s*(.*?)\\s*\\}\\s*");
string testInput =
"{\n"
" First nested string;\n"
" {\n"
" Second nested string;\n"
" }\n"
"}\n";
smatch match;
if (regex_search(testInput, match, regEx))
{
auto result = match[1].str();
}
Какое регулярное выражение сделает его таким, чтобы я мог получать вложенные данные? Спасибо заранее.
Отсутствует. У вас там нет обычного языка, и хотя некоторые библиотеки регулярных выражений расширяют регулярные выражения в области контекстно-свободных языков, таких как эта, стандартная библиотека C++ не поддерживает рекурсию. Вы можете быть заинтересованы в [Boost.Spirit] (http://www.boost.org/doc/libs/1_57_0/libs/spirit/doc/html/index.html), чтобы проанализировать это. – Wintermute