正则表达式如何按%%%分隔符将多段命令输出匹配到不同捕获组
适配多段分隔输出的正则方案
你当前正则失效的核心原因:默认.元字符不匹配换行符,只能捕获到第一个%%%后面的单行内容,且未开启全局匹配、未做分隔边界处理。
通用方案(支持任意数量分段,适配绝大多数正则引擎)
使用正则规则:(.*?)(?=%%%|$)
需要同时开启两个正则匹配模式:
- **单行模式(DOTALL/S模式)
:让.`元字符可以匹配换行符,支持跨行匹配内容 - 全局匹配模式(g模式):匹配到第一段内容后不停止,继续向后匹配所有符合规则的分段
规则含义说明:
.*?:惰性匹配任意字符,尽可能短的匹配到下一个分隔符位置(?=%%%|$):正向预查规则,匹配到下一个%%%分隔符或者整个输出结尾就停止,不会把%%%本身计入匹配结果
匹配后每个匹配结果对应一段分隔的输出内容,如果需要过滤空段或者去除首尾空白,对匹配结果做trim处理即可。
命令行场景快速实现
如果是在Linux命令行中直接提取分段,可以直接执行如下命令处理输出结果:
# 将开头的输入源替换为实际的输出内容来源即可 your_output_cmd | grep -Pzo '(.*?)(?=%%%|$)'
参数说明:
-P启用Perl兼容正则-z将输入内容按null字符分隔,等效开启DOTALL模式支持跨行匹配-o仅输出匹配到的内容
内容的提问来源于stack exchange,提问作者Milan Panic
相关产品推荐
相关产品推荐

