Я пытаюсь выполнить следующий C++ STL на основе кода для замены текста в относительно большом SQL скрипт (~ 8MB):переполнение стека при станд :: regex_replace
std::basic_regex<TCHAR> reProc("^[ \t]*create[ \t]+(view|procedure|proc)+[ \t]+(.+)$\n((^(?![ \t]*go[ \t]*).*$\n)+)^[ \t]*go[ \t]*$");
std::basic_string<TCHAR> replace = _T("ALTER $1 $2\n$3\ngo");
return std::regex_replace(strInput, reProc, replace);
В результате переполнения стека , и трудно найти информацию об этой конкретной ошибке на этом конкретном сайте, так как это также имя сайта.
Edit: Я использую Visual Studio 2013 Update 5
Edit 2: Исходный файл составляет более 23 000 строк. Я вырезал файл до 3500 строк и все еще получаю ошибку. Когда я разрезал его еще на 50 строк до 3,456 строк, ошибка исчезнет. Если я вложу только эти строки в файл, ошибка все равно исчезнет. Это говорит о том, что ошибка не связана с конкретным текстом, а просто слишком много.
Edit 3: Полный работает пример демонстрирует работает должным образом здесь: https://regex101.com/r/iD1zY6/1 Это не работает в этом STL кода, хотя.
вы знаете 'strInput', что вызывает переполнение стека? – vu1p3n0x
@ vu1p3n0x Да, но я не уверен, как поделиться такой большой входной строкой. Я не хочу вставлять 8 Мб текста в вопрос. – BlueMonkMN
ваше регулярное выражение ограничено линией (''^... $ "') Является ли файл всей одной строкой? или есть ли одна строка, которая запускает его? или это только при обработке всего файла сразу, что его запускает? – vu1p3n0x