regex - 使用正则表达式解析信息汇编版本
问题描述
我正在尝试使用正则表达式解析信息版本字符串。
版本字符串的外观有所不同
// CI Build
2020.2.18-preview.2-b5d95e5992d99f6a6eef8faf71c47df694c763bd
// CI Release Build
2020.2.18-b5d95e5992d99f6a6eef8faf71c47df694c763bd
// Local Build
2020.2.18-preview.0
// Other...
2020.2.18
在所有情况下,我都想检索以下部分
version = 2020.2.18
suffix = preview.0, preview.2 or empty
hash = b5d95e5992d99f6a6eef8faf71c47df694c763bd or empty
唯一必须存在的部分是版本部分。
我现在的表达是
(?<Version>(?>\d+\.?){3,})(?:-(?<Suffix>.*?))(?:-(?<Hash>[0-9a-f]{5,40}))
关于如何使后缀和哈希成为可选的任何提示?
我尝试在其中任何一个上添加一个简单的零或一,但这不起作用。
解决方案
您可以使用
^(?<Version>(?>\d+\.?){3,})(?:-(?<Suffix>.*?))??(?:-(?<Hash>[0-9a-f]{5,40}))?$
要点:
^
匹配字符串的开头并$
匹配字符串的结尾(?:-(?<Suffix>.*?))??
是一个可选的惰性模式,匹配 0 或 1 次,仅在下一个子模式不匹配时才尝试(?:-(?<Hash>[0-9a-f]{5,40}))?
是一个可选的贪心模式,尝试了 1 次或 0 次。
请参阅正则表达式演示。
推荐阅读
- javascript - 错误请求错误:使用 axios put 的 React js 中出现 400
- javascript - javascript中文件的UTF-16字节数组?
- java - 处理具有不同多重性的相似对象分组的设计模式?
- swift - 从相机胶卷iOS Swift 5将视频上传到firebase
- c# - 为什么没有断言的 xUnit Fact 类型测试总是通过?
- php - 在 DQL 中使用 ArrayCollection() 类的 contains()
- r - 有没有办法使用 R 从多列中采样数据
- spring-boot - 在 WildFly 15 中启动 Spring Boot 2.2.1 时出错 - Jackson StreamFactory 验证错误
- php - PHP中的正则表达式用于货币价值
- ios - 向 UIlabel 添加超链接