正则表达式 NSRegularExpression 与 NSPredicate

Rya*_*ner 5 regex ios swift3

到目前为止,我一直在使用一个函数来验证电子邮件格式和密码

func isRegexValid(string:String,regex:String) -> Bool {
   return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string)
}
Run Code Online (Sandbox Code Playgroud)

我试图检查某个模式并遇到了问题。我正在寻找一个带有 4 个逗号分隔符后跟“ext”的字符串

^(.*,){4}ext 
Run Code Online (Sandbox Code Playgroud)

上面的函数不能按预期处理这个,所以我尝试了一个效果很好的替代方法

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
}
Run Code Online (Sandbox Code Playgroud)

我想了解两个正则表达式调用之间的区别,以及我们是否应该避免其中一个。

HAK*_*HAK 5

NSPredicate 与 NSRegularExpression 有很大不同。

NSPredicate 用于在 Cocoa 对象中进行搜索和过滤。其主要目的是过滤对象集合中的某些对象。它有完全不同的语法。

正如 NSPredicate 的 Apple 文档中提到的

谓词表示逻辑条件,可用于过滤对象集合。

要进一步学习,您可以参阅谓词编程指南。

另一方面,NSRegularExpression 是一个用于编译正则表达式的类,然后将其应用于 unicode 字符串。

NSRegularExpression 类支持http://userguide.icu-project.org/strings/regexp中定义的标准 ICU 正则表达式

希望这能澄清。