我有兴趣构建一个正则表达式引擎,作为一个侧面项目,仅用于学习目的。
我知道正则表达式评估背后的理论,并对有限状态机等有充分的理解。
我感兴趣的是如何在软件中实现正则表达式引擎。所以我想知道是否有任何类型的教程或在线资源解释了正则表达式引擎的实现,从正则表达式转换为FSM等等。我不希望任何网站只是解释它背后的理论。
感谢。
答案 0 :(得分:47)
Russ Cox有很多关于Implementing Regular Expressions的文章,特别是他的文章Regular Expression Matching Can Be Simple And Fast值得一读。
答案 1 :(得分:17)
我认为Mark-Jason Dominus撰写的文章How Regexes Work非常出色。它针对非程序员,但它是以非常算法的方式编写的,因此它可以用于实现这样的引擎,特别是如果您有任何编译经验。我自己也是这样做的。
文章还提到了更高级的技巧和窍门,并提供了一些有关引擎限制的信息。
答案 2 :(得分:13)
在美丽代码(Amazon,online draft的第一章中,Brian Kernighan谈论了Rob Pike优雅,非常小的正则表达式匹配器。这很简单,但Kernighan提供了七个练习来扩展它,这对你来说可能是一个很好的介绍。
答案 3 :(得分:8)
我有2个有趣的正则表达式机制链接,
答案 4 :(得分:5)
如果您对C感到满意,您可能会从查看Perl-compatible regular expressions的源代码中受益。
答案 5 :(得分:4)
我迟到了,但我发现this WSU course assignment在提升高级别的正则表达式引擎实现方面最有用。我不知道C,所以材料以与语言无关的格式呈现是很好的。重要的是,它可以很好地解释:
此外,我发现Pace professor's article对于实施WSU和Cox提到的re2post
方法非常有用。
我建议先阅读WSU文章,然后再阅读Russ Cox的文章。
答案 6 :(得分:1)
Robert Sedgewick撰写的Algorithms第五章是对该主题的一个非常好的介绍。它解释了NFA是什么以及如何从正则表达式构建NFA。这些例子有视觉效果,非常清晰。它甚至还有一个简单的正则表达式匹配器的代码。还有一些练习可以实现更多的正则表达式功能。
答案 7 :(得分:0)
另一个简单明了的实现(C,少于500行)RecursiveRegexpRaptor
答案 8 :(得分:0)
对于德国读者来说,“Algorithmen auf Sequenzen”的第三章“模式匹配算法”可能很有趣。作者是Sven Rahmann博士,Lehrstuhl XI,FakultätfürInformatik,TU Dortmund。所有算法都有Python示例。