github.com/waldiirawan/apm-agent-go/v2@v2.2.2/internal/configutil/wildcards.go (about) 1 // Licensed to Elasticsearch B.V. under one or more contributor 2 // license agreements. See the NOTICE file distributed with 3 // this work for additional information regarding copyright 4 // ownership. Elasticsearch B.V. licenses this file to you under 5 // the Apache License, Version 2.0 (the "License"); you may 6 // not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, 12 // software distributed under the License is distributed on an 13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 // KIND, either express or implied. See the License for the 15 // specific language governing permissions and limitations 16 // under the License. 17 18 package configutil 19 20 import ( 21 "strings" 22 23 "github.com/waldiirawan/apm-agent-go/v2/internal/wildcard" 24 ) 25 26 // ParseWildcardPatterns parses s as a comma-separated list of wildcard patterns, 27 // and returns wildcard.Matchers for each. 28 // 29 // Patterns support the "*" wildcard, which will match zero or more characters. 30 // A prefix of (?-i) treats the pattern case-sensitively, while a prefix of (?i) 31 // treats the pattern case-insensitively (the default). All other characters in 32 // the pattern are matched exactly. 33 func ParseWildcardPatterns(s string) wildcard.Matchers { 34 patterns := ParseList(s, ",") 35 matchers := make(wildcard.Matchers, len(patterns)) 36 for i, p := range patterns { 37 matchers[i] = ParseWildcardPattern(p) 38 } 39 return matchers 40 } 41 42 // ParseWildcardPattern parses p as a wildcard pattern, returning a wildcard.Matcher. 43 // 44 // Patterns support the "*" wildcard, which will match zero or more characters. 45 // A prefix of (?-i) treats the pattern case-sensitively, while a prefix of (?i) 46 // treats the pattern case-insensitively (the default). All other characters in 47 // the pattern are matched exactly. 48 func ParseWildcardPattern(p string) *wildcard.Matcher { 49 const ( 50 caseSensitivePrefix = "(?-i)" 51 caseInsensitivePrefix = "(?i)" 52 ) 53 caseSensitive := wildcard.CaseInsensitive 54 switch { 55 case strings.HasPrefix(p, caseSensitivePrefix): 56 caseSensitive = wildcard.CaseSensitive 57 p = p[len(caseSensitivePrefix):] 58 case strings.HasPrefix(p, caseInsensitivePrefix): 59 p = p[len(caseInsensitivePrefix):] 60 } 61 return wildcard.NewMatcher(p, caseSensitive) 62 }