У меня есть файл конфигурации, который выглядит следующим образом:
[sectionName]
[sectionName:subSection]
[sectoinname:sub:subsection]
[] # This should not be matched
Где каждая строка, разделенная символом :
, представляет собой либо имя раздела, либо имя подраздела.Я хочу, чтобы регулярное выражение (используя std::regex
в C ++ 11) анализировало эти строки и помещало каждый раздел и подраздел в отдельную группу.
Это регулярное выражение, которое у меня сейчас есть:
([^:\[]+?)(?=:|\])
И оно совпадает, но не разделяется на разные группы, вместо этого совпадает с первым разделом, а затем добавляетподразделы в качестве суффикса.
Например, в исходной строке [sectionName:subSection]
:

Вот мой код C ++ для сопоставления:
const std::smatch ConfigParser::IsSectionHeader( const std::string & aSource )
{
std::smatch section_match;
static const std::regex sectionReg( R"(([^:\[]+?)(?=:|\]))");
std::regex_search( aSource, section_match, sectionReg );
return section_match;
}
Это результат, который я ищу:
Для теста [sectoinname:sub:subsection]
- Полный матч:
[sectoinname:sub:subsection]
- Группа 1:
sectoinname
- Группа 2:
sub
- Группа 3:
subsection
У кого-нибудь есть идеи сгруппировать это правильно?Спасибо