···44 "regexp/syntax"
55)
6677+func lowerRegexp(r *syntax.Regexp) *syntax.Regexp {
88+ newRE := *r
99+ switch r.Op {
1010+ case syntax.OpLiteral, syntax.OpCharClass:
1111+ for i, r := range newRE.Rune {
1212+ if r >= 'A' && r <= 'Z' {
1313+ newRE.Rune[i] = r + 'a' - 'A'
1414+ }
1515+ }
1616+ default:
1717+ for i, s := range newRE.Sub {
1818+ newRE.Sub[i] = lowerRegexp(s)
1919+ }
2020+ }
2121+2222+ return &newRE
2323+}
2424+725// regexpToQuery tries to distill a substring search query that
826// matches a superset of the regexp.
927func regexpToQuery(r *syntax.Regexp) Query {