微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 确认 – 搜索多种模式(逻辑AND)

如何使用ack搜索文件以查找包含所有(或任何)已定义模式的行?

ANY(OR)很简单,例如:

ack 'pattern1|pattern2|pattern3'

但如何写AND(ALL)?例如如何写以下内容

if( $line =~ /pattern1/ && $line =~ /pattern2/ && $line =~ /pattern3/ ) {
    say $line
}

用ack?

或者更准确地说,是否有可能创建一个具有逻辑的正则表达式?

解决方法

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

可写成

/^(?=.*?foo)(?=.*?bar)(?=.*?baz)/s

我们实际上并不需要预测最后一个.

/^(?=.*?foo)(?=.*?bar).*?baz/s

而且,由于我们不关心如果有多个模式的哪个实例匹配,我们可以将其简化为

/^(?=.*foo)(?=.*bar).*baz/s

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐