RegEx在Swift中?
我正在学习斯威夫特,而我有(另一个)问题。 Swift中是否有正则expression式?如果是的话,我该如何使用它们?
在我的研究中,我发现了一些矛盾的信息。 苹果开发者文档有一些提到正则expression式,但它看起来不像我见过的任何其他语言。 如果这是解决scheme,我该如何使用它?
另一方面, 这个网站表明RegEx在Swift中不存在。 它是否正确?
如果有帮助,我试图使用正则expression式来获取包含价格的JSON风格API的平均比特币价格,但也有很多我不想要的东西。
对不起,另一个基本问题。
不幸的是,Swift缺乏正则expression式。 但是你提到的外部链接暴露了2种使用正则expression式的方法。
- 围绕NSRegularExpression做一个类包装,并使用这个类。
- 调用基础方法
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