当字符串与正则表达式匹配时,幕后发生了什么?

时间:2011-06-07 18:57:35

标签: regex

我有兴趣知道使用什么样的算法来匹配它,以及它们是如何优化的,因为我想有些正则表达式会产生大量可能的匹配,这可能会导致严重的问题出现在一个效果不佳的正则表达式上解析器。

另外,我最近发现了ReDoS的概念,为什么(a|aa)+(a|a?)+这样的正则表达式会导致问题?

编辑:我在C#和Python中使用过它们,所以这就是我在考虑这个问题时的想法。我假设Python是用C语言编写的,就像解释器的其余部分一样,但我不知道C#

3 个答案:

答案 0 :(得分:2)

我发现http://www.regular-expressions.info有关于正则表达式的非常有用的信息。

作者特别谈到catastrophic uses of regular expression

答案 1 :(得分:1)

Regex Buddy有这个调试页面,“在正则表达式引擎中为您提供独特的视图”。

http://www.regexbuddy.com/debug.html

答案 2 :(得分:0)

正则表达式引擎有两种:NFA和DFA。我很生疏,所以我不敢记忆中的具体细节。但是,通过算法的Here is a page。一些解析器在表达不佳的情况下表现更好。一本关于这个主题的好书(坐在我的架子上)是Mastering Regular Expression