【发布时间】:2009-07-10 18:06:13
【问题描述】:
我刚刚阅读了这个interesting article,了解支持正则表达式的各种语言的实现细节。
它描述了使用非确定性有限自动机 (NFA) 与确定性有限自动机 (DFA) 的正则表达式的替代实现。它声称回溯 DFA 实现(Perl、Java 等中使用的版本)在某些特别“病态”的正则表达式上容易受到性能非常缓慢的影响。 (grep、awk 和 Tcl 仍然使用 DFA,但不知何故速度呈指数级增长)
它没有提到 .NET 框架,但我想知道 .NET(尤其是 C#)正则表达式是如何实现的,以及它们在性能方面的比较。
编辑:
我可以假设既然回答者的文章提到 .NET 会回溯,那么它将与 Perl 和 Java 相提并论吗?
【问题讨论】:
-
仅供参考,只有 .NET 正则表达式,没有 C# 和 VB.NET 正则表达式。
-
感谢 John - 我有预感这是一个单一的代码库,但不确定 C# 是否公开了 VB 没有公开的任何内容。
-
只是题外话,但与评论相关:afaik,.NET 是用 C# 编码的。 :P 但我知道有人会对此感到困惑。
-
也许您可以指定哪个框架?您可以在anonsvn.mono-project.com/viewvc/trunk/mcs/class/System/… 观看 Mono 的实现
-
惰性量词,如 +?和 *?不要关闭回溯。他们只是颠倒了尝试替代方案的顺序。 (回溯意味着回到正则表达式中的前一个标记。即使它导致匹配被扩大而不是缩小,它仍然是回溯。)
标签: c# .net regex performance grep