package pkg import "regexp" type ( RuleList struct { Description string `json:"description,omitempty"` Name string `json:"name"` Rules []*Rule `json:"rules"` } ) func ParseRuleList(v string) *RuleList { rl := new(RuleList) b := braceParse(v) for _, v1 := range b { var r1 Rule r1.parse(v1) rl.Rules = append(rl.Rules, &r1) } return rl } func ParseRuleLists(s string) ([]*RuleList, error) { var r []*RuleList // without description for _, v := range regexp.MustCompile(`security\s+firewall\s+rule-list\s+(\S+)\s+{\s+rules\s+{\s+(\S(.|\n)*?)(\n}|$)`).FindAllStringSubmatch(s, -1) { l := ParseRuleList(v[2]) l.Name = v[1] r = append(r, l) } // with description for _, v := range regexp.MustCompile(`security\s+firewall\s+rule-list\s+(\S+)\s+{\s+description (.*)\n\s+rules\s+{\s+(\S(.|\n)*?)(\n}|$)`).FindAllStringSubmatch(s, -1) { l := ParseRuleList(v[3]) l.Name = v[1] l.Description = v[2] r = append(r, l) } return r, nil }