该命令的 GNU 实现find
使用《Emacs 正则表达式》默认为其-regex
谓词。可以将其更改为诸如 之类的选项posix-egrep
。
除了以下方面之外,每个引擎还有哪些差异句法?
例如,每一个在性能、简单性方面是否有所不同?
特定的引擎是否应该用于特定的场景(超出个人偏好)?
的版本find
是find (GNU findutils) 4.7.0-git
答案1
你问了一个令人畏惧的主题的问题。
我可以向您推荐的最佳资源是由前计算机科学教授(澳大利亚莫纳什大学)、著名 Perl 开发人员和作者 Damian Conway 撰写的题为“您所知道的关于正则表达式的一切都是错误的”的 PDF/视频:
https://slides.yowconference.com/yowwest2015/Conway-EverythingYouKnowAboutRegexesIsWrong.pdf
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 正则表达式方言。