我有一个字符串:
s := "root 1 12345 /root/pathtomyfolder/jdk/jdk.1.8.0.25 org.catalina.startup"
我需要将版本号grep为字符串
试过了,
var re = regexp.MustCompile(`jdk.*`)
func main() {
matches := re.FindStringSubmatch(s)
fmt.Printf ("%q", matches)
}
答案 0 :(得分:3)
您需要指定捕获组以提取子匹配,如package overview:
中所述如果' Submatch'存在,返回值是识别的切片 表达式的连续子匹配。子匹配是匹配的 括号内的子表达式(也称为捕获组) 正则表达式,从左到右依次编号 左括号。子匹配0是整个表达式的匹配, submatch 1第一个带括号的子表达式的匹配,等等 上。
以下内容:
func main() {
var re = regexp.MustCompile(`jdk\.([^ ]+)`)
s := "root 1 12345 /root/pathtomyfolder/jdk/jdk.1.8.0.25 org.catalina.startup"
matches := re.FindStringSubmatch(s)
fmt.Printf("%s", matches[1])
// Prints: 1.8.0.25
}
您当然希望检查是否确实存在子匹配,或matches[1]
会发生恐慌。
答案 1 :(得分:0)
如果您需要字符串变量中的值在其他地方使用/操作,则可以在Marc给出的示例中添加以下内容:
a := fmt.Sprintf("%s", matches[1])