我正在移植一个使用System.Text.RegularExpressions.Regex
来解析C / C ++包含源文件的C#软件。它们作为字符串完全加载到内存中,然后使用正则表达式进行处理。
它在Windows上完美运行,但在尝试解析较大的文件时,在Linux上运行的Mono失败,并且从System.Text.RegularExpressions.Interpreter
深处抛出了堆栈溢出异常。
代码完全正确 - 它适用于Windows。
有没有办法增加堆栈大小?或者我真的需要将较大的文件拆分成较小的块吗?
编辑:有问题的正则表达式如下所示:
/** Regex that matches #include statements. */
static Regex CPPHeaderRegex = new Regex( "(([ \t]*#[ \t]*include[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n)|([^\n]*\n))*",
RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture );
导致问题的来源是300kB(~8k SLOC)和更大。
请注意,这不是我的代码,我继承了它。