diff --git a/model/labels/regexp.go b/model/labels/regexp.go index a4bdf885ee..5f4f753419 100644 --- a/model/labels/regexp.go +++ b/model/labels/regexp.go @@ -71,6 +71,10 @@ func NewFastRegexMatcher(v string) (*FastRegexMatcher, error) { if err != nil { return nil, err } + + // Remove any capture operations before trying to optimize the remaining operations. + clearCapture(parsed) + if parsed.Op == syntax.OpConcat { m.prefix, m.suffix, m.contains = optimizeConcatRegex(parsed) } diff --git a/model/labels/regexp_test.go b/model/labels/regexp_test.go index 85cbe02a1f..d4385c7481 100644 --- a/model/labels/regexp_test.go +++ b/model/labels/regexp_test.go @@ -93,6 +93,7 @@ var ( "(.+)-(.+)-(.+)-(.+)-(.+)", "((.*))(?i:f)((.*))o((.*))o((.*))", "((.*))f((.*))(?i:o)((.*))o((.*))", + "(.*0.*)", } values = []string{ "foo", " foo bar", "bar", "buzz\nbar", "bar foo", "bfoo", "\n", "\nfoo", "foo\n", "hello foo world", "hello foo\n world", "",