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  }