package util import ( "fmt" "regexp" "strconv" "strings" ) // This function returns the first element of a regex search, used for extracting // individual configuation string. Example regex string (`foo\s+(bar)`, returns bar func RegexpFindStringPtr(re *regexp.Regexp, s string) *string { t := re.FindStringSubmatch(s) if len(t) > 0 { return &t[1] } return nil } func RegexpFindString(re *regexp.Regexp, s string) (r string) { t := re.FindStringSubmatch(s) if len(t) > 0 { r = t[1] } return } func RegexpString(re *regexp.Regexp, s string) string { m := RegexpFindStringPtr(re, s) if m == nil { return "" } return *m } // Return a list of the outer most bracer matched elements func BraceParse(s string) (l []string) { if s == "" { return } var brOpen int var r string for _, v := range strings.Split(s, "\n") { if strings.Contains(v, "{") { brOpen += 1 } if strings.Contains(v, "}") { brOpen -= 1 } if brOpen != 0 { r = fmt.Sprintf("%s\n%s", r, v) } if brOpen == 0 { r = fmt.Sprintf("%s\n%s", r, v) l = append(l, r) r = "" } } return } //This method attemps to match regex pattern and returns a pointer to a number or nil if the match is not a number. func RegexpAtoiPtr(re *regexp.Regexp, s string) *int { m := RegexpFindStringPtr(re, s) if m != nil { i, err := strconv.Atoi(*m) if err != nil { return nil } return &i } return nil } func RegexpAtoi(re *regexp.Regexp, s string) (int, error) { m := RegexpFindString(re, s) if m != "" { i, err := strconv.Atoi(m) if err != nil { return -1, err } return i, nil } return -1, nil } func RegexpAtoInt(re *regexp.Regexp, s string) int { m := RegexpFindStringPtr(re, s) if m != nil { i, err := strconv.Atoi(*m) if err != nil { return -1 } return i } return -1 }