Упрощение регулярного выражения для std::regex
Проверяю строку на полное соответствие шаблону с помощью std::regex_match. При длине строк >120 символов может появится исключение о превышении сложности проверки полного соответствия(error_complexity) или о переполнении стека (error_stack). Второе можно исправить с помощью #define _REGEX_MAX_STACK_COUNT n
На данный момент регулярное выражение удалось упростить так:
regex r("(\"([A-Z_]+((,(?!-)|\\|(?!-))?))+->[A-Z_]+\"(,(?!$)|$))+");
Пример валидной строки:
"A_B,K->CN","CN|K,A_B->D_L","MA,AM|AP->P_A",...
Возможные ошибки которые должны считаться невалидными:
"A_B,,K->CN","CN||K,A_B->D_L"
"A_B,K->CN"","CN|K,A_B->D_L"
"A_B,K->CN",,"CN|K,A_B->D_L"
Как еще можно упростить регулярное выражение?