You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求更优正则表达式:提取语义化版本的主版本号

更优解决方案:提取版本字符串的主版本号

核心需求梳理

你需要从规范/非规范版本字符串中提取主版本号(即第一个.之前的内容),用于Dockerfile、Maven及相关插件场景。下面针对不同场景给出精准方案:


方案1:通用兼容型(覆盖所有格式)

如果不需要验证版本合法性,只需要提取第一个.之前的所有内容作为主版本(比如v2.3.1取v2、beta-1.0取beta-1、1.x取1),用最简单的逻辑即可:

  • 正则提取(分组匹配):^([^.]*)
  • CLI替换实现(比如sed):s/\..*//

Dockerfile示例:

RUN VERSION=$(cat version.txt) && MAIN_VERSION=$(echo "$VERSION" | sed 's/\..*//') && echo $MAIN_VERSION

方案2:规范SemVer专属(仅处理合法语义化版本)

如果只需要处理符合SemVer规范的版本(比如1.0.0、2.1.3-beta+build123),提取纯数字主版本号,用精准匹配正则:

^(0|[1-9]\d*)

Maven build-helper插件结合properties插件示例:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0.0</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>read-project-properties</goal>
            </goals>
            <configuration>
                <files>
                    <file>version.txt</file>
                </files>
            </configuration>
        </execution>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
                <name>main.version</name>
                <value>${project.version}</value>
                <regex>^(0|[1-9]\d*)</regex>
                <replacement>$1</replacement>
                <failIfNoMatch>true</failIfNoMatch>
            </configuration>
        </execution>
    </executions>
</plugin>

方案3:混合场景(优先规范,兼容非规范)

想优先匹配SemVer格式,不符合时自动 fallback 到通用提取,用分支正则(GNU grep等工具支持):

^(0|[1-9]\d*)|^([^.]*)

CLI grep示例:

grep -oP '^(0|[1-9]\d*)|^([^.]*)' version.txt | head -n1

对你现有正则的点评

  1. 正则\.(.*)$:本质是匹配第一个.及之后的内容,需要通过替换反向得到主版本,逻辑绕了一层,不如直接提取主版本的直观。
  2. SemVer验证正则:这个是用来校验版本合法性的,不是提取主版本的工具,冗余且无法处理非规范版本。

测试示例

假设version.txt内容:

1.2.3
v4.5.6-beta
alpha-7.x
invalid_version
  • 方案1输出:1、v4、alpha-7、invalid_version(全兼容)
  • 方案2输出:1、匹配失败(v4不符合纯数字SemVer)、匹配失败、匹配失败
  • 方案3输出:1、v4、alpha-7、invalid_version(兼顾规范与兼容)

内容的提问来源于stack exchange,提问作者hmhkata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:40:13