C#正则表达式长期加载的问题

时间:2010-12-11 20:31:21

标签: c# regex f# timeout

我有一个安静的长正则表达式,有时它反应很快,有时它会像疯了一样加载。

这是我的正则表达式:

<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 个答案:

答案 0 :(得分:2)

看起来您正在尝试使用正则表达式解析XML文档。这不是一种真正的最佳方法。我的猜测是,由于在正则表达式中使用了回溯,你会发现问题。

您可以尝试重写正则表达式,但XML不是常规语言,因此无法通过正则表达式进行解析。

查看文档How to read XML from a file by using Visual C#以开始使用。

旁注:有关尝试使用正则表达式解析非常规语言时会发生什么的有趣读物,请参阅此Stack Overflow question

答案 1 :(得分:1)

我认为你使用的是错误的工具。你真的想要Xpath,可能还有XSLT。您希望使用正则表达式来解析原始XML的唯一时间是怀疑XML在语法上以可预测的方式被破坏。

说真的,看看Xpath - 深入研究XML文档的结构并拉出你想要的位是很神奇的。