Я пишу процедуру загрузки для своего приложения, и она включает в себя чтение данных из файла и создание соответствующего объекта с соответствующими свойствами.
Файл состоит из последовательных записей (разделенных новой строкой) в следующем формате:
=== OBJECT TYPE ===
<Property 1>: Value1
<Property 2>: Value2
=== END OBJECT TYPE ===
Где значения часто представляют собой строки, которые могут состоять из произвольных символов, новых строк и т. д.
Я хочу создать std::regex
, который может соответствовать этому формату и позволить мне использовать std::regex_iterator
для чтения каждого из объектов в файл по очереди.
Однако у меня возникли проблемы с созданием регулярного выражения, соответствующего этому типу формата; Я просмотрел синтаксис ECMAScript и создал свое регулярное выражение следующим образом, но оно не соответствует строке в моем тестовом приложении:
const std::regex regexTest( "=== ([^=]+) ===\\n([.\\n]*)\\n=== END \\1 ===" );
И при использовании этого в следующем тестовом приложении не удается сопоставить регулярное выражение со строкой:
int main()
{
std::string testString = "=== TEST ===\n<Random Example>:This is a =test=\n<Another Example>:Another Test||\n=== END TEST ===";
std::cout << testString << std::endl;
const std::regex regexTest( "=== ([^=]+) ===\\n([.\\n]*)\\n=== END \\1 ===" );
std::smatch regexMatch;
if( std::regex_match( testString, regexMatch, regexTest ) )
{
std::cout << "Prefix: \"" << regexMatch[1] << "\"" << std::endl;
std::cout << "Main Body: \"" << regexMatch[2] << "\"" << std::endl;
}
return 0;
}
str::regex
не реализован (полностью/вообще) в некоторых компиляторах?g++
конкретно (последний раз проверял). - person Qtax   schedule 19.06.2013std::regex
и связанных функций. - person Thomas Russell   schedule 19.06.2013