github.com/zly-app/zapp@v1.3.3/pkg/utils/text.go (about) 1 /* 2 ------------------------------------------------- 3 Author : zlyuancn 4 date: 2021/2/19 5 Description : 6 ------------------------------------------------- 7 */ 8 9 package utils 10 11 var Text = &textUtil{} 12 13 type textUtil struct{} 14 15 // 模糊匹配, ? 表示一个字符, * 表示任意字符串或空字符串 16 func (*textUtil) IsMatchWildcard(text string, p string) bool { 17 m, n := len(text), len(p) 18 dp := make([][]bool, m+1) 19 for i := 0; i <= m; i++ { 20 dp[i] = make([]bool, n+1) 21 } 22 dp[0][0] = true 23 for i := 1; i <= n; i++ { 24 if p[i-1] == '*' { 25 dp[0][i] = true 26 } else { 27 break 28 } 29 } 30 for i := 1; i <= m; i++ { 31 for j := 1; j <= n; j++ { 32 if p[j-1] == '*' { 33 dp[i][j] = dp[i][j-1] || dp[i-1][j] 34 } else if p[j-1] == '?' || text[i-1] == p[j-1] { 35 dp[i][j] = dp[i-1][j-1] 36 } 37 } 38 } 39 return dp[m][n] 40 } 41 42 // 模糊匹配, 同 IsMatchWildcard, 只要匹配某一个通配符则返回true 43 func (u *textUtil) IsMatchWildcardAny(text string, ps ...string) bool { 44 for _, p := range ps { 45 if u.IsMatchWildcard(text, p) { 46 return true 47 } 48 } 49 return false 50 }