捕获两个大括号之间的所有数据

时间:2016-04-12 18:17:03

标签: regex go

尝试读取两个花括号内的所有数据。我怀疑我的正则表达式失败,因为它无法匹配换行符。链接到go playground中的源代码:http://play.golang.org/p/uNjd01CL8Z

package main

import (
    "fmt"
    "regexp"
)

func main() {
    x := `
lease {
  interface "eth0";
  fixed-address 10.11.0.1;
  option subnet-mask 255.255.0.0;
}
lease {
  interface "eth0";
  fixed-address 10.11.0.2;
  option subnet-mask 255.255.0.0;
}
lease {
  interface "eth0";
  fixed-address 10.11.0.2;
  option subnet-mask 255.255.0.0;
}`

    re := regexp.MustCompile(`{(.+)?}`)
    fmt.Println(re.FindAllString(x, -1))

}

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    x := `
lease {
    interface "eth0";
    fixed-address 10.11.0.1;
    option subnet-mask 255.255.0.0;
}
lease {
    interface "eth0";
    fixed-address 10.11.0.2;
    option subnet-mask 255.255.0.0;
}
lease {
    interface "eth0";
    fixed-address 10.11.0.2;
    option subnet-mask 255.255.0.0;
}`

    re := regexp.MustCompile(`(?s){.*?}`)
    fmt.Println(re.FindAllString(x, -1))
}
我改变了两件事。 (?s)标志表示它也会匹配换行符.通配符。并且.*?意味着它将在大括号之间匹配少于多个字符。如果你使用.*,它将匹配外部的大括号。

这里是用于Go正则表达式的正则表达式语法文档的链接:https://github.com/google/re2/wiki/Syntax