我在Regex制作的MatchCollection中遇到问题。当我在此MatchCollection中使用.Count时,处理将永远不会像无限循环中的优先级那样结束。
从技术上讲,MatchCollection无法计算列表中有多少个元素,那么如果我在foreach中使用此列表,则会陷入困境。
该代码是:
var matches = Regex.Matches(OriginalSource, "(function)(.*?){(?:[^{}]+|{(?<n>)|}(?<-n>))+(?(n)(?!))*}", RegexOptions.IgnoreCase);
var ssc = 0;
try {
ssc = matches.Count;
} catch (Exception ex) {
throw new Exception("LOL");
}
foreach (Match match in matches) {
// ...
}
字符串OriginalSource是:https://pastebin.com/UcL710g7?fbclid=IwAR1HNXZpkxo76Ecxdib9XgaBu0Rz2YmJsRoKFOmrPvLYjQkyY3nKl8RSbgI
我该如何处理?这没有异常,可以创建超时过程吗?因为我可以忽略此代码,但是此列表不允许我向前移动。
最佳答案
是否可以创建超时流程?
var matches = Regex.Matches(OriginalSource,
"(function)(.*?){(?:[^{}]+|{(?<n>)|}(?<-n>))+(?(n)(?!))*}",
RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2));
添加一个超时(并且超时有效)。这是在.NET 4.5中添加的。
关于c# - MatchCollection.Count永无止境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53543351/