Skip to content

🎯 ExtractVersionFromOutput

从任意文本输出中提取第一个形如 X.Y.Z(可带预发布后缀)的版本号。

何时使用

当你拿到一段非标准化的命令输出或日志,需要从中抓取版本号但不确定格式时使用。它用宽松的正则匹配,适用于 composerphp、自定义工具等各种输出。

签名

go
func ExtractVersionFromOutput(output string) (string, bool)

参数

参数类型说明
outputstring任意命令输出文本

返回值

  • string:提取到的版本号(如 2.6.62.6.6-RC1);未找到时为空串。
  • bool:是否成功找到版本号。

示例

go
package main

import (
	"fmt"

	"github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
	outputs := []string{
		"Composer version 2.6.6 2024-02-22",
		"PHP 8.2.1 (cli) (built: Jan  4 2024)",
		"some random text without version",
	}

	for _, out := range outputs {
		if ver, ok := composer.ExtractVersionFromOutput(out); ok {
			fmt.Printf("提取到版本: %s\n", ver)
		} else {
			fmt.Println("未找到版本号")
		}
	}
}

进阶

  • 🔍 使用的正则为 (\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?),匹配主次补丁号,可选 - 后的预发布标识(如 1.2.3-beta.1)。返回第一个匹配项。
  • ⚠️ 由于正则宽松,可能误匹配日期中的数字(如 2024-02-22 不会被匹配,因为它不符合 X.Y.Z 三段点分),但对于格式规整的版本输出是可靠的。
  • 🔗 需要结构化的 Composer 版本信息(含主次补丁整数与发布日期)请用 ParseVersionOutput
  • 📦 需要从输出中提取包名列表请用 ExtractPackageNamesFromOutput

基于 MIT 许可证发布