The Swift Code之正则表达式,及简化匹配正则方式

吴统威 on 编程语言 SWIFT | 2015-04-09 22:21:21.0

正则表达式的应用,在每一种编程语言里面是必备的功能,swift也是逃不掉的.今天主要是怎么入手使用正则表达式,然后基本的应用,且定义一个操作符,来进行快速判断,类似与javascript中的test方法.

在swift中通过NSRegularExpression,构建一个实例,然后调用matchesInString来做字符串的判断.下面我们来做一个简单的手机号判断.

matchesInString方法中最后一个参数是决定是否在整个字符串中进行匹配,最后如果匹配找到则返回比0大的数字,否则就没匹配到.

var error:NSError?
let pattern = "[0-9]{11}"
let phone = "19999999999"
let regx = NSRegularExpression(pattern: pattern, options:
 NSRegularExpressionOptions.CaseInsensitive, error: &error)!
let match = regx.matchesInString(phone,options:nil,range:NSMakeRange(0,count(phone)))

下一步,我们通过infix关键字来简化这一个步骤,首先我们创建一个正则类Regex,里面重要的代码就是上面的代码的改变

//正则匹配
class Regex{
    
    let internalExpression:NSRegularExpression
    
    let pattern:String
    
    init(pattern:String){
        self.pattern = pattern
        var error:NSError?
        self.internalExpression = NSRegularExpression(pattern: self.pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)!
    }
    
    func test(input:String)->Bool {
        let matches = self.internalExpression.matchesInString(input, options: nil, range: NSMakeRange(0,count(input)))
        return matches.count > 0
        
    }
    
}

然后我们通过infix来定义一个操作符,且定义其位一个函数

//定义操作符
infix operator =~ {}
func =~(input:String,pattern:String) -> Bool{
    return Regex(pattern: pattern).test(input)
}

这样之后我们就可以通过 =~ 这个操作符来做判断了

if "18888888888" =~ "[0-9]{11}" {
   println("匹配正确")
}

这种方式来处理正则匹配是非常方便的,希望能帮助到!