尝试读取两个花括号内的所有数据。我怀疑我的正则表达式失败,因为它无法匹配换行符。链接到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))
}
答案 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