Ack with regex - 与简单查询混淆

Ame*_*ina 11 regex ack

我正在尝试使用ack-is-better-than-grep(ack)和正则表达式在我的代码存储库中查找行和片段.我的理解是ack使用Perl-derivative正则表达式,这是正确的吗?

但是,我不确定这些查询将如何工作:

ack 'foo'
ack '.*(foo)+.*'

ack '.*foo'
ack 'foo.*'
Run Code Online (Sandbox Code Playgroud)

他们能提供不同的产出吗?如果是这样,为什么?

编辑:在我的测试中,他们输出不同的结果(例如,第一个输出比其他更多的匹配).它们还突出显示相同线条的不同部分.

编辑2:输出的差异显然与突出显示(输出的颜色)有关.我注意到,我办ack--nocolor该命令的输出上面是一样的.显然ack使用默认着色运行会使我的机器/配置中的部分输出不可见.我在Ubuntu 11.04中从bash在GNOME终端上运行它.

Kon*_*lph 14

我的理解是ack使用Perl-derivative正则表达式,这是正确的吗?

是.实际上,ack用Perl编写的,只是将表达式转发给内部引擎.

他们能提供不同的产出吗?如果是这样,为什么?

表达式应该找到相同的结果.但是,输出可能仍然不同,因为ack在其输出中允许语法高亮显示(默认情况下;除非--nocolor已指定) - 它使用ANSI转义码来对输出中的命中进行着色,显然'foo'会突出显示与'.*foo'(和其他查询)不同的内容.

即,在以下输入中:

This is a foo test.
Run Code Online (Sandbox Code Playgroud)

查询'foo'将突出显示:" foo",同时'.*foo'将突出显示" This is a foo".