我正在使用matchcollection来解析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);
2条答案
按热度按时间x4shl7ld1#
你的正则表达式中有太多的
".*?"
,可能你的一些输入的可能组合的数量接近“无限”。试着使用原子组"(?>.*?)"
来代替,以自动丢弃组中任何标记所记住的所有回溯位置。这至少会使所有正则表达式解析花费有限的时间。vxqlmq5t2#
Timespan
参数建立一个超时间隔以匹配所有对象。或者您可以使用Regex.InfiniteMatchTimeout
来指示该方法不应超时。MSDN regex.Matches()