Ios Regex NSRegularExpression vs nspreditate
到目前为止,我一直在使用一个函数来验证电子邮件格式和密码Ios Regex NSRegularExpression vs nspreditate,ios,regex,swift3,Ios,Regex,Swift3,到目前为止,我一直在使用一个函数来验证电子邮件格式和密码 func isRegexValid(string:String,regex:String) -> Bool { return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string) } 我试图检查某个模式,但遇到了问题。我想找到一个带有4个逗号分隔符,后跟“ext”的字符串 上面的函数不能像预期的那样处理这个问题,所以我尝试了一个效果很好的替代
func isRegexValid(string:String,regex:String) -> Bool {
return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string)
}
我试图检查某个模式,但遇到了问题。我想找到一个带有4个逗号分隔符,后跟“ext”的字符串
上面的函数不能像预期的那样处理这个问题,所以我尝试了一个效果很好的替代方法
func isRegexValid2(string:String,pattern:String) -> Bool {
let regex = try! NSRegularExpression(pattern: pattern, options: [])
return regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.utf16.count)) != nil
}
我想了解两个regex调用之间的区别,以及我们是否应该避免其中一个调用。NSPredicate与NSRegularExpression非常不同 NSPredicate用于在Cocoa对象之间进行搜索和筛选。它的主要目的是在对象集合中过滤特定对象。它的语法完全不同 正如NSPredicate的Apple文档中所述 谓词表示逻辑条件,可用于过滤对象集合 如需进一步研究,请参见 另一方面,NSRegularExpression是一个类,用于编译正则表达式,然后将其应用于unicode字符串 NSRegularExpression类支持在中定义的标准ICU正则表达式
希望这能澄清。您可能应该使用
^([^,]*,){4}ext
来代替。问题可能是由于
也匹配,
(第一个),并且模式只有在回溯后才会匹配前四个字段
func isRegexValid2(string:String,pattern:String) -> Bool {
let regex = try! NSRegularExpression(pattern: pattern, options: [])
return regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.utf16.count)) != nil
}