ios NSPredicate SELF MATCHES不适用于简单包含正则表达式

ttisahbt  于 2023-03-20  发布在  iOS
关注(0)|答案(2)|浏览(149)

我所需要的只是使用NSPredicateevaluate模式检查字符串是否包含.page.link短语。

extension String {
    func isValid(for string: String) -> Bool {
        NSPredicate(format: "SELF MATCHES %@", string).evaluate(with: self)
    }
}

let pattern = ".page.link" // "\\.page\\.link"

"joyone.page.link/abcd?title=abcd".isValid(for: pattern) //false
"joyone.page.link".isValid(for: pattern) //false
"joyone.nopage.link/abcd?title=abcd".isValid(for: pattern) //false

我知道有一种更简单的方法可以做到这一点,但它是更大的东西的一部分,我的模式只是枚举中的大小写。
前两个应该是true

efzxgjgh

efzxgjgh1#

MATCHES始终考虑整个字符串。
range(of:options:)也可以与Regex通话,并且更易于使用

extension String {
    func isValid(for pattern: String) -> Bool {
        range(of: pattern, options: .regularExpression) != nil
    }
}
wko9yo5t

wko9yo5t2#

当然@vadian的答案是非常正确的,这是推荐的,但这里的解决方案如下:

let pattern = ".{1,}\\.page\\.link.{1,}"

感谢您的评论,它认为一个完整的字符串。

相关问题