使用正则表达式的缺点

时间:2011-06-28 11:02:56

标签: c# .net regex memory-leaks

最近我的经理建议我不要太依赖Regex,因为它有很多缺点。当我试图了解更多信息时,我听说它有像正则表达式这样的问题会导致内存泄漏,因为有些对象在使用后仍继续挂在字符串引用上?

.NET RegEx "Memory Leak" investigation

所以说reg-ex导致内存开销是正确的,如果你有其他选择,不应该使用它?是否有任何其他不利于注册(除了它很难学习:))

PS我正在开发一个类似于网络爬虫的应用程序(c#.net),它提取所有href和一些其他信息,如标题,元标记等。我可以选择使用HTML Agility包而不是reg-ex。< / p>

3 个答案:

答案 0 :(得分:8)

使代码难以阅读。大多数情况下,即使以更冗长的代码为代价,最好不要使用正则表达式。代价高昂的性能影响以及代码可读性的降低意味着在大多数情况下不使用正则表达式,尤其是简单的和复杂的情况。

为了你提到的目的(解析HTML等),简单的正则表达式无法完成工作(因为HTML不是常规语言)。这就像拿锤子一样,一切看起来像钉子。

答案 1 :(得分:1)

我对此的看法是RegEx经常可以完成这项工作,但您需要小心不要过度使用它们。正如他们所说,当你拥有的只是一把锤子时,每个问题看起来都像钉子一样。

在这种情况下,您尝试解析HTML以获取数据。 HTML解析器更具可读性,可能更可靠。解析HTML的正则表达式通常会在某些情况下失败(格式错误的HTML是大的)或者比使用HTML解析器时更复杂。

我不知道内存泄漏和性能问题,但甚至忽略了我倾向于尝试将正则表达式使用降至最低。

答案 2 :(得分:1)

正则表达式可以模糊您正在使用的逻辑;有时在代码中执行它可能不那么复杂。在代码中,您可以打破不同的逻辑测试并对每个测试进行评论,以便人们可以看到您正在做的事情的原因。