我不是在问sed中是否有贪婪的正则表达式,我已经知道没有。我要问的是:已知sed是最好的或者是最好的流编辑器之一。那么为什么这个工具的开发人员没有实现非贪婪的正则表达式。与此工具可以执行的所有操作相比,它看起来很简单。
答案 0 :(得分:7)
非贪婪匹配是Perl-Compatible Regular Expressions的一项功能。 PCRE仅在1997年libpcre实现之前作为Perl语言的一部分提供,而sed
的POSIX实现在1992年首次引入 - 并且它引用的标准C库正则表达式例程的实现早于即便如此,已于1988年出版。
The POSIX specification for sed
支持BRE;只有BRE(“基本正则表达式”)和ERE(“扩展正则表达式”)完全是specified in POSIX,并且两种形式都不包含非贪婪匹配。
因此,要将PCRE支持(或者,非贪婪匹配支持)标准化以包含在所有sed
实现中,首先需要在POSIX正则表达式定义中进行标准化。
然而,考虑到PCRE支持可能不合适的实际原因,在实践中这种情况不太可能高度不太可能发生(除了作为扩展存在或不存在,在实现者的选择下) ;请参阅以下部分:
sed
通常被视为“核心工具”,因此仅使用最小的依赖项实现。因此,要求libpcre安装sed
会使libpcre成为操作系统的一部分,即使在大小非常高的图像中也需要包含它(initrd / initramfs图像等)。有关Thompson NFA在回溯实现方面的性能优势的讨论,请参阅https://swtch.com/~rsc/regexp/regexp1.html。