【问题标题】:How are regular expressions implemented in .NET?.NET 中如何实现正则表达式?
【发布时间】: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


【解决方案1】:

here 有一篇真棒文章。他利用了您可以进入 .NET 框架代码并查看它的作用这一事实,并解释了一切是如何工作的。这是一本很好的读物。

【讨论】:

  • ...由居民 Jeff Moser 撰写。
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多