RegEx在Swift中?

我正在学习斯威夫特,而我有(另一个)问题。 Swift中是否有正则expression式?如果是的话,我该如何使用它们?

在我的研究中,我发现了一些矛盾的信息。 苹果开发者文档有一些提到正则expression式,但它看起来不像我见过的任何其他语言。 如果这是解决scheme,我该如何使用它?

另一方面, 这个网站表明RegEx在Swift中不存在。 它是否正确?

如果有帮助,我试图使用正则expression式来获取包含价格的JSON风格API的平均比特币价格,但也有很多我不想要的东西。

对不起,另一个基本问题。

不幸的是,Swift缺乏正则expression式。 但是你提到的外部链接暴露了2种使用正则expression式的方法。

  1. 围绕NSRegularExpression做一个类包装,并使用这个类。
  2. 调用基础方法rangeOfString:options:RegularExpressionSearch作为选项。 这在Swift中。

第二种方式更清洁,更容易实施。

Swift中的方法方法定义

 func rangeOfString(_ aString: String!,options mask: NSStringCompareOptions) -> NSRange 

你可以使用正则expression式匹配,如下所示:

 let myStringToBeMatched = "ThisIsMyString" let myRegex = "ing$" if let match = myStringToBeMatched.rangeOfString(myRegex, options: .RegularExpressionSearch){ println("\(myStringToBeMatched) is matching!") } 

这里是关于rangeOfString()的Apple文档

我面临同样的问题。 所以,我写了一个小包装 – https://gist.github.com/ningsuhen/dc6e589be7f5a41e7794 。 在您的项目中添加Regex.swift文件,并添加“基础”框架,如果尚未添加。 一旦你这样做,你可以使用replace和匹配方法如下。

 "+91-999-929-5395".replace("[-\\s\\(\\)]", template: "") //replace with empty or remove "+91-999-929-5395".match("[-\\s\\(\\)]") //simple match - returns only true or false, not the matched patterns. 

另一个简单的select是使用NSPredicate,如果你感兴趣的是纯validation(true / false):

这是一个快速的正则expression式来匹配加拿大邮政编码:

 func isCAZipValid(_ zip: String) -> Bool { return NSPredicate(format: "SELF MATCHES %@", "^([AZ]\\d[AZ])(\\s|-)?(\\d[AZ]\\d)$") .evaluate(with: zip.uppercased()) } 

Swift没有正则expression式,所以你将需要自己实现一个包装类,或者使用这样的库实现Regex类http://www.dollarswift.org/#regex