如何调整正则表达式匹配两类指定格式的zip文件名
正则问题修正方案
你写的正则无法匹配第二个文件名的核心问题有3个:
- 未匹配
_config和版本号之间的短横线:第二个文件名里_config后面还有一个-才到版本号,你原正则把第一个文件名的版本号前的-算进了前缀分组,导致匹配到_config后直接要求接数字,自然匹配失败 - 所有字面量
.没有转义:正则里.默认匹配任意字符,要匹配文件名里的真实点号需要写成\. - 版本号第四段的可选逻辑处理错误,你原写法要求第四段必须存在,和第一个文件名的规则冲突
修正后的正则
如果不需要单独捕获每个版本号段,使用简化写法即可:
^abc\.cdf\.ghi\.klm(?:_config)?-(\d+\.){2,3}\d+\.zip$
如果需要单独提取每个版本号字段,使用带捕获分组的写法:
^abc\.cdf\.ghi\.klm(?:_config)?-(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?\.zip$
规则说明
(?:_config)?:匹配可选的_config后缀,?:表示不需要捕获该分组,不需要提取该部分内容的话可以保留-:匹配版本号前固定的短横线(\d+\.){2,3}\d+:匹配3~4段的版本号,同时适配1.0.0和1.0.0.18两种格式- 所有
\.都严格匹配文件名里的点号,避免误匹配其他字符 - 结尾的
$确保文件名以.zip结尾,不会匹配带多余后缀的异常文件
内容的提问来源于stack exchange,提问作者ida
相关产品推荐
相关产品推荐

