【发布时间】:2022-10-07 01:33:20
【问题描述】:
我正在尝试在 Java 中创建一个正则表达式来匹配并获取每个依赖项的名称、版本、通道和所有者,但我无法拥有一个涵盖所有可能场景的内容:
该结构类似于name/version@owner/channel,其中版本可能具有 semver 结构,所有者和频道是可选的。
目前,我有:
^(?<name>[\\d\\w][\\d\\w\\+\\.-]+)\\/(?<version>[\\d\\w][\\d\\w\\.-]+)(@(?<owner>\\w+))?(\\/(?<channel>.+))?$
但是boost_atomic/1.59.0+4@owner/release 失败了,因为+4 不匹配,我需要之前的值-> 1.59.0
其他一些需要有效且对上述正则表达式有效的场景是:
Poco/1.9.0@pocoproject/stable
zlib/1.2.11@conan/stable
freetype/2.10.1/stable
openssl/1.0.2g/stable
openssl/1.0.2g
openssl/1.0.2g@owner
此外, cmets 可能存在一些依赖关系:
zlib/1.2.11@conan/stable # comment
在那种情况下,我需要摆脱组件,只使用正则表达式获取相关信息。
我不确定我当前的正则表达式是否良好,但从我测试的结果来看,只有一些场景缺失