You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用grep/perl/awk实现正则表达式的重叠匹配

方案1:awk实现(空格分隔场景最优)

直接遍历文本字段输出相邻词对,逻辑最简单,性能最高,适配所有awk版本:

echo "bob mary mike bill kim jim john" | awk '{for(i=1;i<NF;i++) print $i, $(i+1)}'

输出结果完全符合需求:

bob mary
mary mike
mike bill
bill kim
kim jim
jim john

方案2:Perl正则实现(通用重叠匹配场景)

如果是更复杂的非空格分隔的重叠匹配需求,用零宽正向先行断言实现,不需要修改原有正则逻辑:

echo "bob mary mike bill kim jim john" | perl -ne 'while(/(?=(\b[a-z]+ [a-z]+\b))/g) { print "$1\n" }'

原理说明:(?=)是零宽正向先行断言,匹配时不会消耗字符串的字符,每次匹配完成后指针仅向后移动1位,因此可以捕获到重叠的匹配结果,捕获组$1存储每次匹配到的双词结果。

补充:GNU grep 实现(仅GNU环境可用)

如果仅限GNU环境使用,也可以直接用grep的-P参数实现:

echo "bob mary mike bill kim jim john" | grep -oP '(?=(\b[a-z]+ [a-z]+\b))\1'

这个方案兼容性不如前两个,优先推荐awk或Perl实现。

内容的提问来源于stack exchange,提问作者RobD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:24:00