去模式匹配

时间:2018-01-07 14:20:29

标签: regex go

我有一个字符串:

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)
}

2 个答案:

答案 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])