emacs 和 posix-egrep 等正则表达式引擎有什么区别?

emacs 和 posix-egrep 等正则表达式引擎有什么区别?

该命令的 GNU 实现find使用《Emacs 正则表达式》默认为其-regex谓词。可以将其更改为诸如 之类的选项posix-egrep

除了以下方面之外,每个引擎还有哪些差异句法

例如,每一个在性能、简单性方面是否有所不同?

特定的引擎是否应该用于特定的场景(超出个人偏好)?

的版本findfind (GNU findutils) 4.7.0-git

答案1

你问了一个令人畏惧的主题的问题。

我可以向您推荐的最佳资源是由前计算机科学教授(澳大利亚莫纳什大学)、著名 Perl 开发人员和作者 Damian Conway 撰写的题为“您所知道的关于正则表达式的一切都是错误的”的 PDF/视频:

https://slides.yowconference.com/yowwest2015/Conway-EverythingYouKnowAboutRegexesIsWrong.pdf

https://youtu.be/ubvSjW6Nyqk

Conway 在他的演示文稿/PDF 中指出,有“正则表达式语法的六种主要方言”,包括 BRE、ERE、EMACS、VIM、PCRE 和 PSIX(“PERL6”的最后一个版本,最近更名为 Raku)。

例如,在 PDF 第 13 页上,Conway 显示了用 VIM/EMACS 编辑器方言编写的正则表达式:

/abc\|abx/

在ERE、PCRE和PERL6(即RAKU)中实际上是这样写的:

/abc|abx/

还指出了许多其他差异,请参阅演示文稿/PDF 了解详细信息。

买者自负:链接https://www.gnu.org/software/gnulib/manual/html_node/Regular-expression-syntaxes.html已在 StackExchange 上被引用为权威的正则表达式参考。然而,事实上,该 html 页面没有提及 PERL6(又名 RAKU)正则表达式方言,甚至没有提及广泛分布的 PCRE 正则表达式方言。

相关内容