2

HTMLへの解析中にmatchcollectionを使用しています。しかし、このソリューションには時間がかかり、失敗することもあります。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);
4

2 に答える 2

0

正規表現が多すぎて".*?"、おそらく入力の一部で可能な組み合わせの数が「無限」に近くなります。代わりにアトミック グループを使用して"(?>.*?)"、グループ内のトークンによって記憶されているすべてのバックトラッキング位置を自動的に破棄してみてください。これにより、少なくともすべての正規表現の解析に有限の時間がかかります。

于 2013-02-08T19:42:30.250 に答える