Signed-off-by: Marco Pracucci <marco@pracucci.com>
This commit is contained in:
Marco Pracucci 2023-09-29 14:17:17 +02:00
parent c28d940234
commit 5ae9c194ce
No known key found for this signature in database
GPG key ID: 74C1BD403D2DF9B5
2 changed files with 7 additions and 2 deletions

View file

@ -533,7 +533,7 @@ func stringMatcherFromRegexpInternal(re *syntax.Regexp) StringMatcher {
// we can optimize. // we can optimize.
switch { switch {
// Literal as prefix. // Literal as prefix.
case len(re.Sub) == 2 && re.Sub[0].Op == syntax.OpLiteral: case right == nil && len(re.Sub) == 2 && re.Sub[0].Op == syntax.OpLiteral:
right = stringMatcherFromRegexpInternal(re.Sub[1]) right = stringMatcherFromRegexpInternal(re.Sub[1])
if right != nil { if right != nil {
matches = []string{string(re.Sub[0].Rune)} matches = []string{string(re.Sub[0].Rune)}
@ -541,7 +541,7 @@ func stringMatcherFromRegexpInternal(re *syntax.Regexp) StringMatcher {
} }
// Literal as suffix. // Literal as suffix.
case len(re.Sub) == 2 && re.Sub[1].Op == syntax.OpLiteral: case left == nil && len(re.Sub) == 2 && re.Sub[1].Op == syntax.OpLiteral:
left = stringMatcherFromRegexpInternal(re.Sub[0]) left = stringMatcherFromRegexpInternal(re.Sub[0])
if left != nil { if left != nil {
matches = []string{string(re.Sub[1].Rune)} matches = []string{string(re.Sub[1].Rune)}

View file

@ -413,6 +413,11 @@ func TestStringMatcherFromRegexp(t *testing.T) {
// Case insensitive alternate with same literal prefix and .* suffix. // Case insensitive alternate with same literal prefix and .* suffix.
{"(?i:(xyz-016a-ixb-dp.*|xyz-016a-ixb-op.*))", &literalPrefixStringMatcher{prefix: "XYZ-016A-IXB-", prefixCaseSensitive: false, right: orStringMatcher{&literalPrefixStringMatcher{prefix: "DP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}, &literalPrefixStringMatcher{prefix: "OP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}}}}, {"(?i:(xyz-016a-ixb-dp.*|xyz-016a-ixb-op.*))", &literalPrefixStringMatcher{prefix: "XYZ-016A-IXB-", prefixCaseSensitive: false, right: orStringMatcher{&literalPrefixStringMatcher{prefix: "DP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}, &literalPrefixStringMatcher{prefix: "OP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}}}},
{"(?i)(xyz-016a-ixb-dp.*|xyz-016a-ixb-op.*)", &literalPrefixStringMatcher{prefix: "XYZ-016A-IXB-", prefixCaseSensitive: false, right: orStringMatcher{&literalPrefixStringMatcher{prefix: "DP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}, &literalPrefixStringMatcher{prefix: "OP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}}}}, {"(?i)(xyz-016a-ixb-dp.*|xyz-016a-ixb-op.*)", &literalPrefixStringMatcher{prefix: "XYZ-016A-IXB-", prefixCaseSensitive: false, right: orStringMatcher{&literalPrefixStringMatcher{prefix: "DP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}, &literalPrefixStringMatcher{prefix: "OP", prefixCaseSensitive: false, right: anyStringWithoutNewlineMatcher{}}}}},
// Concatenated variable length selectors are not supported.
{"foo.*.*", nil},
{"foo.+.+", nil},
{".*.*foo", nil},
{".+.+foo", nil},
} { } {
c := c c := c
t.Run(c.pattern, func(t *testing.T) { t.Run(c.pattern, func(t *testing.T) {