Упрощение регулярного выражения для 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"

Как еще можно упростить регулярное выражение?


Ответы (0 шт):