.NET中如何实现正则表达式?

6
我刚刚阅读了这篇有趣的文章,它介绍了支持正则表达式的各种语言的实现细节。该文章描述了使用非确定有限自动机(NFAs)与确定有限自动机(DFAs)的正则表达式的替代实现。它声称,在某些特别“病态”的正则表达式上,回溯DFA实现(Perl、Java和其他版本使用的版本)容易出现非常慢的性能。(grep、awk和Tcl仍然使用DFAs,但在某种程度上速度呈指数级增长)
该文章没有提到.NET框架,但我想知道.NET(尤其是C#)正则表达式是如何实现的,并且在性能方面如何比较。
编辑:
我可以假设,由于答案者的文章提到.NET进行回溯,它将与Perl和Java相当吗?

2
FYI,只有.NET正则表达式,没有C#和VB.NET正则表达式。 - John Saunders
谢谢John - 我有一种预感它是单一的代码库,但不确定C#是否暴露了VB没有的任何东西。 - Jeff Meatball Yang
1
只是离题但与评论相关:据我所知,.NET是用C#编写的。 :P 但我可以理解有人会感到困惑。 - Zack
也许您可以指定是哪个框架?您可以在http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/System/System.Text.RegularExpressions/观看Mono的实现。 - Dykam
如果你想关闭回溯,你可以使用+?和*?来做到。不过通常情况下,我会通过修改模式来解决这些问题。 - ojrac
1
懒惰量词(如+?和*?)不会关闭回溯。它们只是反转尝试备选项的顺序。(回溯是指返回到正则表达式中的前一个标记。即使它导致匹配扩展而不是缩小,仍然是回溯。) - Jan Goyvaerts
1个回答

10

这里有一篇很棒的文章(链接),作者利用.NET框架代码调试的特性解释了正则表达式的实现原理,讲述得非常详细易懂,阅读效果很好。


...由Stack Overflow用户Jeff Moser撰写。 - Michael Petrotta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接