Проверяю строку состоящую из 10000 a и одного b на соответствие регулярному выражению a*b , regex_match возвращает true. Заменяю выражение на (a)*b , в regex_match бросает исключение runtime_error. Смотрю, оказывается происходит переполнение стека. Замена (a)*b на (?:a)*b не помогает. Как же быть, если нужно записать что-то вроде (a|c)*b ?
int main()
{
int const n = 10000;
char s[n];
std::fill_n(s, n, 'a');
s[n] = 'b';
s[n + 1] = '\0';
boost::regex e("(?:a)*b");
bool b = boost::regex_match(s, e);
return 0;
}
22.04.08 02:12: Перенесено модератором из 'C/C++' — Кодт