System.Text.RegularExpressions.Regex
我正在移植一个用于解析 C/C++ 包含源文件的 C# 软件。它们作为字符串完全加载到内存中,然后只用正则表达式处理。
它在 Windows 上完美运行,但在 Linux 上运行的 Mono 在尝试解析较大的文件时失败,并引发了从 deep inside 引发的堆栈溢出异常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) 或更大。
请注意,这不是我的代码,我继承了它。