🎯 ExtractVersionFromOutput
从任意文本输出中提取第一个形如 X.Y.Z(可带预发布后缀)的版本号。
何时使用
当你拿到一段非标准化的命令输出或日志,需要从中抓取版本号但不确定格式时使用。它用宽松的正则匹配,适用于 composer、php、自定义工具等各种输出。
签名
go
func ExtractVersionFromOutput(output string) (string, bool)参数
| 参数 | 类型 | 说明 |
|---|---|---|
output | string | 任意命令输出文本 |
返回值
string:提取到的版本号(如2.6.6或2.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。