Golang判断String是否包含字符串(带通配符)

use*_*527 2 string search wildcard go

使用 Go,如何确定字符串中是否包含包含通配符的特定字符串?例子:

我们正在寻找t*e*s*t(* 可以是任何字符和任何长度的字符。

Input True: ttttteeeeeeeesttttttt

Input False: tset

小智 5

通过将模式中的转换为正则表达式的 来使用regexp包。*.*

// wildCardToRegexp converts a wildcard pattern to a regular expression pattern.
func wildCardToRegexp(pattern string) string {
    var result strings.Builder
    for i, literal := range strings.Split(pattern, "*") {

        // Replace * with .*
        if i > 0 {
            result.WriteString(".*")
        }

        // Quote any regular expression meta characters in the
        // literal text.
        result.WriteString(regexp.QuoteMeta(literal))
    }
    return result.String()
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

func match(pattern string, value string) bool {
    result, _ := regexp.MatchString(wildCardToRegexp(pattern), value)
    return result
}
Run Code Online (Sandbox Code Playgroud)

在 Go PlayGround 上运行它