Ack with regex - 与简单查询混淆

时间:2011-07-18 19:09:09

标签: regex ack

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

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

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

ack '.*foo'
ack 'foo.*'

他们可以提供不同的输出吗?如果是这样,为什么?

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

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

1 个答案:

答案 0 :(得分:14)

  

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

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

  

他们可以提供不同的输出吗?如果是这样,为什么?

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

即,在以下输入中:

'.*foo'

This is a foo test. 的查询会突出显示:“'foo'”,而foo会突出显示“'.*foo'”。

相关问题