C# 使用正则表达式的缺点

C# 使用正则表达式的缺点,c#,.net,regex,memory-leaks,C#,.net,Regex,Memory Leaks,最近我的经理建议我不要太依赖Regex,因为它有很多缺点。当我试图了解更多信息时,我听说它存在一些问题,比如regex会导致内存泄漏,因为一些对象即使在使用后仍然挂起字符串引用 所以说reg ex会导致内存开销,如果您有其他选择,就不应该使用它,这是正确的吗?reg ex是否还有其他不利条件(除了学习困难:)) 另外,我正在开发一个类似于web crawler的应用程序(c#.net),它可以提取所有的HREF和一些其他信息,如标题、元标记等。我可以选择使用HTML Agility pack而

最近我的经理建议我不要太依赖Regex,因为它有很多缺点。当我试图了解更多信息时,我听说它存在一些问题,比如regex会导致内存泄漏,因为一些对象即使在使用后仍然挂起字符串引用

所以说reg ex会导致内存开销,如果您有其他选择,就不应该使用它,这是正确的吗?reg ex是否还有其他不利条件(除了学习困难:))


另外,我正在开发一个类似于web crawler的应用程序(c#.net),它可以提取所有的HREF和一些其他信息,如标题、元标记等。我可以选择使用HTML Agility pack而不是reg-ex。

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


对于您提到的目的(解析HTML等),简单正则表达式无法完成这项工作(因为HTML不是一种正则语言)。这就像有一把锤子,一切看起来都像钉子。

我的观点是,正则表达式通常可以完成这项工作,但你需要小心,不要过度使用它们。正如他们所说,当你只有一把锤子时,每个问题看起来都像钉子

在本例中,您试图解析HTML以获取数据。HTML解析器将更具可读性,而且可能更可靠。解析HTML的正则表达式通常在某些情况下会失败(格式错误的HTML是最大的问题),或者比使用HTML解析器要复杂得多


我不知道内存泄漏和性能问题,但即使忽略这一点,我也倾向于尽量减少正则表达式的使用。

正则表达式会混淆您使用的逻辑;有时用代码来做可能不那么复杂。在代码中,您可以将不同的逻辑测试分解并对每个测试进行注释,这样人们就可以看到您为什么要这样做。

1。不,不使用正则表达式的主要原因不是可能的内存泄漏。2.3.使用HTML Agility Pack。使用正则表达式提取HREF?什么。。。解析html?顺便说一句,在一些情况下,当我们锁定服务器的CPU时,罪魁祸首是一个正则表达式碰到了一个拐弯处。。。。对他们要非常小心,;p@Marc谢谢……我会。。根据MSDN,pattern=“href\\s*=\\s*(?:\”(?[^\”]*)\“\”(?\\s+)“我会为href做这件事。但我选择了HTML Agility pack,因为我需要一些其他数据,这些数据可以在xpath和DOM的帮助下轻松有效地获取。你的最后一句话很奇怪。锤子和钉子是完美的搭配。@Daniel Hilgarth我想我用对了-@Daniel:有趣的是,我在我的表达中使用了相同的表达,但措辞(我认为)稍微好一点。这个想法是,当你有一把锤子时,一切看起来都像钉子。那个螺丝钉?用锤子把它敲进去@马诺兹:啊,那就是你的意思。。。你应该在链接中这样写,though@manojlds当前位置由于害怕偏离主题而变成英语用法,我认为两者之间的差别很微妙。“你所看到的只是钉子”意味着它们实际上是钉子,没有其他东西。“一切看起来都像钉子”意味着事物看起来只是钉子,而事实上它们可能不是。