- 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
}
----
