我在解析到html时正在使用matchcollection。但是此解决方案需要很长时间,有时会失败。我在想如果我设置matchcollection超时将解决此问题。如何设置比赛集合的超时时间? (框架4.0)
anchorPattern[0]="<div.*?class=\"news\">.*?<div.*?class=\".*?date.*?\">(?<date>.*?)?</div>.*?<a.*?href=\"(?<link>.*?)\".*?>(?<title>.*?)?</a>.*?<(span.*?class=\".*?desc.*?\">(?<spot>.*?)?</span>)?"
MatchCollection mIcerik = Regex.Matches(html, anchorPattern[i], RegexOptions.Compiled);
if (mIcerik.Count > 0)
ListDegree.Add(i,mIcerik.Count);
最佳答案
您的正则表达式有太多".*?"
,对于某些输入而言,可能的组合数量可能接近“无限”。尝试改用原子组"(?>.*?)"
,以自动丢弃该组内所有标记记住的所有回溯位置。这至少将使所有正则表达式解析花费有限的时间。