【问题标题】:Problems with C# regular expression long loadC#正则表达式长加载的问题
【发布时间】:2010-12-11 20:31:20
【问题描述】:

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

这是我的正则表达式:

<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# 希望任何人都可以回答这个问题。

谢谢。

【问题讨论】:

  • 您可能会对这篇关于灾难性回溯 (regular-expressions.info/catastrophic.html) 的文章感兴趣,该文章专门记录了 .*? 量词的一些令人讨厌的副作用。
  • 谢谢大家。该网站很棒。帮了我很多^^"

标签: c# regex f# timeout


【解决方案1】:

您似乎正在尝试使用正则表达式解析 XML 文档。这并不是真正的最佳方法。我的猜测是,由于在正则表达式中使用了回溯,您会遇到问题。

您可以尝试重写您的正则表达式,但 XML 不是正则语言,因此不能被正则表达式解析。

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

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

【讨论】:

    【解决方案2】:

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

    说真的,看看 Xpath - 它是深入研究 XML 文档结构并提取所需部分的魔法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2015-10-28
      相关资源
      最近更新 更多