- write a flag parser/converter for github.com/scorpionknifes/go-pcre (and github.com/GRbit/go-pcre) : ---- // i CASELESS // m MULTILINE // s DOTALL // x EXTENDED // U UNGREEDY // 8 UTF8 (non-standard flag letter; standard PCRE uses (*UTF8) outside (?...) syntax) // // Flags after a '-' inside group disable associated flag and are ignored // (applies inside the regex engine once prefix is stripped). // pattern, flags := ParsePrefixFlags(`(?im)^hello`) // re := pcre.MustCompile(pattern, flags) func ParsePrefixFlags(pattern string) (string, int) { if !strings.HasPrefix(pattern, "(?") { return pattern, 0 } end := strings.IndexByte(pattern, ')') if end < 0 { return pattern, 0 } inner := pattern[2:end] // everything between "(?" and ")" for _, ch := range inner { if !strings.ContainsRune("imsxU8-", ch) { return pattern, 0 } } positive := inner if dash := strings.IndexByte(inner, '-'); dash >= 0 { positive = inner[:dash] } var flags int for _, ch := range positive { switch ch { case 'i': flags |= pcre.CASELESS case 'm': flags |= pcre.MULTILINE case 's': flags |= pcre.DOTALL case 'x': flags |= pcre.EXTENDED case 'U': flags |= pcre.UNGREEDY case '8': flags |= pcre.UTF8 } } return pattern[end+1:], flags } ----