过去一周我一直在用正则表达式做一些工作,并设法取得了很多进展,但是,我仍然相当n00b。我有一个正则表达式用C#编写:在C#中正则表达式缓慢运行
string isMethodRegex =
@"\b(public|private|internal|protected)?\s*(static|virtual|abstract)?"+
@"\s*(?<returnType>[a-zA-Z\<\>_1-9]*)\s(?<method>[a-zA-Z\<\>_1-9]+)\s*\"+
@"((?<parameters>(([a-zA-Z\[\]\<\>_1-9]*\s*[a-zA-Z_1-9]*\s*)[,]?\s*)+)\)";
IsMethodRegex = new Regex(isMethodRegex);
出于某种原因,称正则表达式IsMethodRegex.IsMatch()它挂起超过30秒以下字符串时:
"\t * Returns collection of active STOP transactions (transaction type 30) "
有谁如何正则表达式的内部工作,以及为什么这匹配这个字符串,而不是其他人。我和它玩过一段时间,发现如果我拿出*和括号,那么它运行良好。也许正则表达式写得不好?
任何帮助将非常感激。
你试过编译正则表达式吗?其中一个构造函数重载提供了这种能力。 –
@Steve:我只是测试一下自己,编译完成后仍然需要很长时间。我可以在LinqPad的自己的机器上重现很长时间。 – mellamokb
我知道这是在旁边,但你的正则表达式对我来说很脆弱。不知何故,我认为性能是你的问题中最少的。 – ChaosPandion