2010-12-11 2 views
0

私は静かな長い正規表現を持っていますが、時にはクレイジーなように長い時間ロードすることもあります。ここC#の正規表現の長時間ロードに関する問題

は私の正規表現です:

<div class=""rwResult bg"">.*?mp3/d/[^>]+>(?<Name>[^<]+)</a>.*?artist:[^>]+>(?<Artist>[^<]+).*?user</span>[^>]+[^""]+""(?<Uploader>[^""]+).*?category:.*?"">.*?"">(?<Category>[^<]+).*?time: (?<Duration>[^ ]+) \| (?<StreamSize>[0-9]+) (?<Weight>[^ ]+) \| listened: (?<Clicks>[0-9]+).*?<a href=""(?<DownloadLink>http://dl[^""]+) 

ではなく、グループごとに正規表現の多くを使用して、私は1時間の正規表現をしていることを好みます。 正規表現が実行されている間に長時間のロードを確認または回避できる関数はありますか?

私はC#またはF#の誰かがこの問題に答えることを願っています。

ありがとうございました。

+2

致命的なバックトラッキング(http://www.regular-expressions.info/catastrophic.html)に興味があるかもしれません。具体的には、 '。*? '量限定子の厄介な副作用のいくつかが書かれています。 – Juliet

+0

ありがとうございます。ウェブサイトは素晴らしかったです。 alotを通して私を助けました^^ " –

答えて

1

あなたは間違ったツールを使用していると思います。あなたは本当にXpathとおそらくXSLTが必要です。正規表現を使用して生のXMLを解析する唯一の方法は、XMLが予測可能な方法で構文的に壊れている可能性がある場合です。

真剣に言えば、Xpathを見てください。XML文書の構造を掘り下げ、必要なビットを引き出すのは魔法です。

2

正規表現を使用してXML文書を解析しようとしているようです。これは実際には最適なアプローチではありません。私の推測では、あなたの正規表現でのバックトラックの使用のために問題が発生しているということです。

正規表現を書き直すことはできますが、XMLは正規の言語ではないため、正規表現では解析できません。

開始するには、文書How to read XML from a file by using Visual C#をご覧ください。

Sidenote:正規表現を使用して非正規言語を解析しようとすると、何が起こるかについての面白い読み物については、Stack Overflow questionを参照してください。