1

以下代码抛出

'ConsoleApplication1.Program' 的类型初始化程序引发了异常。

在线上

public static Regexp[] keepers = { ... };

为什么这是错误的,我该如何解决?

namespace ConsoleApplication1
{
    class Program
    {
        public static String output = "";
        public static Regex[] keepers = { 
                                            new Regex(@"using(?<everythingElse> [a-zA-Z.]+;)"),
                                            new Regex(@"namespace(?<everythingElse> [a-zA-Z._]+)"),
                                            new Regex(@"class(?<everythingElse> [a-zA-Z._]+)"),
                                            new Regex(@"(public|private)? ?(static)? ?(?<type> String|void|int|Double)(" + Regex.Escape("[") + "?" + Regex.Escape("]") + "?" + "(?<functionName> [a-z_]+)(?<params> [^\r\n]+)")
                                        };
        [STAThread]
        static void Main(string[] args)
        {}}}
4

2 回答 2

6

始终查看完整的异常。这是您的情况(稍微重新格式化):

Unhandled Exception: System.TypeInitializationException: The type initializer for
'ConsoleApplication1.Program' threw an exception. ---> System.ArgumentException:
 parsing "(public|private)? ?(static)? ?(?<type> String|void|int|Double)(\[?]?
 (?<functionName> [a-z_]+)(?<params> [^]+)" - Not enough )'s.
   at System.Text.RegularExpressions.RegexParser.ScanRegex()
   at System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op)
   at System.Text.RegularExpressions.Regex..ctor(String pattern, RegexOptions options, TimeSpan matchTimeout, Boolean useCache)
   at System.Text.RegularExpressions.Regex..ctor(String pattern)
   at ConsoleApplication1.Program..cctor()
   --- End of inner exception stack trace ---
   at ConsoleApplication1.Program.Main(String[] args)

所以你可以看到:

  • 它在第四个正则表达式中
  • 你的括号有问题

接下来,我会尝试将那个大的正则表达式分解成小的正则表达式,并找出为什么你有一个无与伦比的括号。我怀疑这一点:

"(" + Regex.Escape("[") + "?" + Regex.Escape("]") + "?"

应该:

"(" + Regex.Escape("[") + "?" + Regex.Escape("]") + ")?"

...但你应该检查一下。

于 2012-12-11T17:36:21.947 回答
3

4. 正则表达式中

@"(public|private)? ?(static)? ?(?<type> String|void|int|Double)(

打开一个 ( 最后。这不是被关闭的!

于 2012-12-11T17:39:01.680 回答