1
1
mirror of https://github.com/wader/fq.git synced 2024-12-25 14:23:18 +03:00
fq/internal/gojqextra/regexp.go

29 lines
709 B
Go
Raw Normal View History

2021-09-23 19:35:04 +03:00
package gojqextra
import (
"fmt"
"regexp"
"strings"
)
// from gojq, see https://github.com/itchyny/gojq/blob/main/LICENSE
func CompileRegexp(re, allowedFlags, flags string) (*regexp.Regexp, error) {
if strings.IndexFunc(flags, func(r rune) bool {
return !strings.ContainsAny(string([]rune{r}), allowedFlags)
}) >= 0 {
return nil, fmt.Errorf("unsupported regular expression flag: %q", flags)
}
re = strings.ReplaceAll(re, "(?<", "(?P<")
if strings.ContainsRune(flags, 'i') {
re = "(?i)" + re
}
if strings.ContainsRune(flags, 'm') {
re = "(?s)" + re
}
r, err := regexp.Compile(re)
if err != nil {
return nil, fmt.Errorf("invalid regular expression %q: %w", re, err)
}
return r, nil
}