ack 中不能使用最小可能匹配长度为0的正则表达式

ack 是一个使用 Perl 编写的类似于 grep的文本过滤工具,可以使用 Perl 5 正则表达式。

在使用 ack的过程中,发现一个值得注意的问题,即:使用最小可能匹配长度为0的正则表达式,可能会使ack 陷入死循环。

例如:

1
echo hello world | ack '.*'

将使 ack 陷入死循环。

注意匹配长度为0的匹配和不匹配的区别:

1
echo hello world | ack 'x'

上面这个例子中, x 不匹配 hello world ,因此 ack 没有任何输出并退出。而在下面的例子中, x* 可以匹配空字符串,匹配 长度为0,因此 x* 会使 ack进入死循环:

1
echo hello world | ack 'x*'
Powered By Valine
v1.5.2