如何修改正则表达式以匹配目标字符串并排除无关内容
解决方案
修改后的正则表达式
/(?<=^|\/)(?!.*\/)(.*?)(?:(?<!-\d):|-(?:v?))([\d.-]+)(?=\.|$)/
关键调整说明
- 排除RPM类误匹配:通过
(?<!-\d):断言,确保匹配:分隔符时,其前面不是-数字组合,直接过滤掉openssl-1:1.1.1k-9.el8_7这类格式的字符串。 - 兼容两种版本分隔逻辑:
- 处理镜像标签格式(如
name:v1.7.9或name:1.0.4):匹配:分隔符,且规避RPM的数字前缀场景。 - 处理无标签分隔的格式(如
name-v4.13.0):匹配-v或-作为分隔前缀,保证名称捕获截止到版本前的有效位置。
- 处理镜像标签格式(如
- 锁定最后路径段:
(?<=^|\/)和(?!.*\/)确保只匹配路径分隔符/后的最后一段内容,不会误抓路径中的中间部分。
测试验证
- 目标匹配案例均能正确捕获:
rhmtc/openshift-velero-plugin-rhel8:v1.7.9-4→ 名称:openshift-velero-plugin-rhel8,版本:1.7.9-4oc-mirror-plugin-container-v4.13.0-202305091542.p0.gbee629a.assembly.stream→ 名称:oc-mirror-plugin-container,版本:4.13.0oadp/oadp-velero-plugin-for-aws-rhel8:1.0.4-5→ 名称:oadp-velero-plugin-for-aws-rhel8,版本:1.0.4-5
- 无关字符串
openssl-1:1.1.1k-9.el8_7、java-1.8.0-ibm-1:1.8.0.7.15-1jpp.1.el7均不会被匹配。
内容的提问来源于stack exchange,提问作者Roi Horowitz
相关产品推荐
相关产品推荐

