如何使用ack搜索文件以查找包含 ALL (也没有定义的模式)的行?

ANY(OR)很容易,例如:

ack 'pattern1|pattern2|pattern3'

但是如何编写 AND(ALL)?例如如何编写以下内容:
if( $line =~ /pattern1/ && $line =~ /pattern2/ && $line =~ /pattern3/ ) {
    say $line
}

使用ack吗?

或者更确切地说,可以使用logical and创建一个正则表达式吗?

最佳答案

 /foo/s && /bar/s && /baz/s

可以写成
 /^(?=.*?foo)(?=.*?bar)(?=.*?baz)/s

实际上,我们不需要最后一个。
 /^(?=.*?foo)(?=.*?bar).*?baz/s

而且由于我们不关心模式中的哪个实例是否匹配(如果存在多个),我们可以将其简化为
 /^(?=.*foo)(?=.*bar).*baz/s

关于regex - ack-搜索多种模式(逻辑与),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36266965/

10-14 17:24