Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Regex NSRegularExpression vs nspreditate_Ios_Regex_Swift3 - Fatal编程技术网

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
}