Swift正则expression式:一个string匹配模式?

在Swift中,查看一个string是否匹配模式的简单方法是什么?

伪代码示例:

if string matches pattern ... if string =~ pattern ... 

(我已经阅读了Swift文档,并没有看到正则expression式的能力,我已经阅读了关于添加一个新的=~运算符,这是一个好主意,但比我想要的更复杂,因为这是一个教学项目。尝试rangeOfString但得到错误:'string'没有成员'rangeOfString'。我正在寻找一个Swift解决scheme,即不键入NSRegularExpression。我不需要做任何事情的匹配结果数据。

Swift版本3解决scheme:

 if string.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil ... 

Swift版本2解决scheme:

 if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ... 

例子 – 这个string是否包含两个字母“o”字符?

 "hello world".rangeOfString("o.*o", options: .RegularExpressionSearch) != nil 

注意:如果您收到错误消息'String' does not have a member 'rangeOfString' ,那么在之前添加: import Foundation 。 这是因为Foundation提供了自动桥接到Swift String类的NSString方法。

 import Foundation 

感谢Onno Eberhard对Swift 3的更新。

为了得到你真正需要的语法,你可以很容易的定义一个新的运算符,它包含了桥接NSStringfunction:

 infix operator =~ {} func =~(string:String, regex:String) -> Bool { return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil } "abcd" =~ "ab*cd" "abcd" =~ "abcde+" 

上面提到的解决scheme不再适用于我,所以我在这里发布我的解决scheme(我用string的扩展名):

 extension String { func matches(_ regex: String) -> Bool { return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil } } 

例:

 if str.matches("^[a-zA-Z0-9._-]{1,30}$") { //... } 

这将返回一个string是否匹配模式

例如。 matchesPattern(text:“sd56Yz”,pattern:“[a-zA-Z0-9] +”)true

例如。 matchesPattern(text:“sd56 $ Yz”,pattern:“[a-zA-Z0-9] +”)false

 func matchesPattern(text: String?, pattern: String?) -> Bool { guard hasValue(text) && hasValue(pattern) else { return false } let range = text!.rangeOfString(pattern!, options: .RegularExpressionSearch) guard range != nil else { return false } let rangeString = text?.substringWithRange(range!) return areEqual(text, string2: rangeString) }