2010-12-11 52 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[^""]+) 

正則表達式爲每組我寧願做一次正則表達式,而不是使用了很多東西。 是否有任何函數可以在正則表達式執行時檢查或避免長負載?

我正在C#或F#希望任何人都可以回答這個問題。

謝謝。

+2

您可能會對這篇有關災難性回溯(http://www.regular-expressions.info/catastrophic.html)的文章感興趣,它專門記錄了'。*?'量詞的一些令人討厭的副作用。 – Juliet 2010-12-11 20:49:39

+0

謝謝大家。該網站是偉大的。幫助我通過很多^^「 – 2010-12-16 12:40:45

回答

1

我想你使用的是錯誤的工具。你真的想要Xpath,可能還需要XSLT。你唯一想用正則表達式來解析原始XML的時候,就是懷疑XML以可預見的方式在語法上被破壞了。

說真的,看看Xpath - 這對研究XML文檔的結構和取出你想要的位來說很神奇。

2

它看起來像你正在嘗試使用正則表達式解析XML文檔。這不是一個最佳的方法。我的猜測是,由於在正則表達式中使用了回溯,所以你看到了問題。

您可以嘗試重寫正則表達式,但XML不是常規語言,因此無法通過正則表達式進行分析。

看一下文檔How to read XML from a file by using Visual C#即可開始使用。

旁註:有關讀取使用正則表達式解析非常規語言時發生的情況,請參閱此堆棧溢出question