我在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/

10-12 20:27