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)

だからあなたは見ることができます:

  • 4番目の正規表現にあります
  • ブラケットに問題があります

次に、その大きな正規表現を小さな正規表現に分割して、比類のないブラケットがある理由を解明します。私はこれを疑う:

"(" + 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 に答える