You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Go正则表达式提取字符串中的JDK版本号

提取JDK版本号的正确Go实现

我来帮你搞定这个版本号提取的问题~你之前用的正则jdk.*会匹配从"jdk"开始到字符串末尾的所有内容,这显然不是你想要的纯版本号部分,咱们来调整一下实现方式。

解决方案思路

我们需要用更精准的正则表达式,定位到jdk.之后的版本号区域,通过捕获分组提取出单独的版本号字符串。针对你给出的版本格式(1.8.0.25),可以专门匹配数字+点号的组合。

完整代码示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	s := "root 1 12345 /root/pathtomyfolder/jdk/jdk.1.8.0.25 org.catalina.startup"
	// 正则解释:匹配"jdk."开头,捕获后面的数字+点号组合的版本号
	var re = regexp.MustCompile(`jdk\.(\d+\.\d+\.\d+\.\d+)`)
	matches := re.FindStringSubmatch(s)
	
	if len(matches) > 1 {
		fmt.Printf("提取到的版本号:%q\n", matches[1])
	} else {
		fmt.Println("未找到匹配的版本号")
	}
}

代码细节说明

  • 正则jdk\.(\d+\.\d+\.\d+\.\d+)
    • jdk\.:匹配字面量"jdk."(点号在正则里是通配符,所以要加反斜杠转义)
    • (\d+\.\d+\.\d+\.\d+):捕获分组,精准匹配数字.数字.数字.数字的版本格式,\d+表示一个或多个连续数字
  • FindStringSubmatch返回的切片中:
    • 索引0是整个匹配的完整字符串(比如"jdk.1.8.0.25")
    • 索引1是我们需要的纯版本号部分
  • 加入长度判断,避免找不到匹配时出现索引越界的报错

运行结果

执行代码后会输出:

提取到的版本号:"1.8.0.25"

如果你的版本号格式可能有变化(比如jdk1.8.0_25这种下划线分隔的情况),可以用更灵活的正则兼容多种格式:

var re = regexp.MustCompile(`jdk[._](\d+\.\d+\.\d+[._]?\d*)`)

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

火山引擎 最新活动