通配符模式匹配:

Rah*_*eel 4 xcode swift

通配符模式匹配:如果给定字符串和含有通配符,即一个图案*?,其中?可以匹配到任何单个字符在输入字符串并*可以匹配到任何数量的字符,包括零个字符的,设计一个有效的算法来发现如果与图案匹配完整的输入字符串与否。

例如:

  • 输入:字符串=“xyxzzxy”,模式=“x***y”

    输出:匹配

  • 输入:字符串=“xyxzzxy”,模式=“x***x”

    输出:不匹配

  • 输入:字符串=“xyxzzxy”,模式=“x***x?”

    输出:匹配

  • 输入:字符串=“xyxzzxy”,模式=“*”

    输出:匹配

Mar*_*n R 7

在 Foundation 类(特别是NSPredicate)的帮助下,您可以简单地实现通配符匹配

func wildcard(_ string: String, pattern: String) -> Bool {
    let pred = NSPredicate(format: "self LIKE %@", pattern)
    return !NSArray(object: string).filtered(using: pred).isEmpty
}
Run Code Online (Sandbox Code Playgroud)

LIKE比较不正是你想要什么:

左手表达式等于右手表达式: ? 和 * 允许作为通配符,其中 ? 匹配 1 个字符,* 匹配 0 个或多个字符。

例子:

print(wildcard("xyxzzxy", pattern: "x***y"))  // true
print(wildcard("xyxzzxy", pattern: "x***x"))  // false
print(wildcard("xyxzzxy", pattern: "x***x?")) // true
print(wildcard("xyxzzxy", pattern: "*"))      // true

print(wildcard("a12b34c", pattern: "a?b?c"))      // false
print(wildcard("a12b34c", pattern: "a*b*c"))      // true
Run Code Online (Sandbox Code Playgroud)


Rah*_*eel -1

func matchingString() {

    var savingValueOfJ = 0
    var boolean = [Bool]()
    inputString =  inputStringTextField.text!
    pattern = patternTextField.text!

    let inputCharacters = Array(inputString)
    let patternCharacters = Array(pattern)
    for (index, firstCharacter) in patternCharacters.enumerated()    {
        if index == patternCharacters.count - 1, index != 0 {
            if inputCharacters.last == firstCharacter || firstCharacter == "*" || firstCharacter == "?"  {
                boolean.append(true)
                break
            }
            else {
                boolean.append(false)
                break
            }
        } else {
            if firstCharacter != "*" {
                while savingValueOfJ  <= inputCharacters.count {
                    if firstCharacter == inputCharacters[savingValueOfJ] || firstCharacter == "?" {

                        boolean.append(true)
                        savingValueOfJ += 1
                        break
                    } else {

                        boolean.append(false)
                        savingValueOfJ += 1
                        break
                    }

                }

            }
        }
    }

    let arr = boolean.filter{ $0 == false}
    if arr.count > 0 {
        displayingResultLbl.text = "Not A Match"
    }
    else {
        displayingResultLbl.text = "Matche's"
    }
}
Run Code Online (Sandbox Code Playgroud)