我试图执行下列基于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);
结果是一个堆栈溢出,并且很难在这个特定网站上找到有关特定错误的信息,因为这也是该网站的名称。
编辑:我使用Visual Studio 2013更新5
编辑2:原始文件是超过23000行。我将文件减少到3,500行并仍然出现错误。当我用另一条〜50条线将它裁减到3,456条线时,错误消失了。如果我只将这些剪切线放入文件中,错误仍然消失。这表明这个错误与特定的文本无关,而只是太多而已。
编辑3:全工作例子证明经营得当这里: https://regex101.com/r/iD1zY6/1 它不会在STL代码工作,虽然。
您知道触发堆栈溢出的'strInput'吗? – vu1p3n0x
@ vu1p3n0x是的,但我不知道如何分享如此大的输入字符串。我不想在问题中提供8 MB的文本。 – BlueMonkMN
你的正则表达式是以行('“^ ... $”')为界的吗?文件是否都是一行?或者是否有一行触发它?还是只在一次处理整个文件时触发它? – vu1p3n0x