iOS开发系列iOS way, life way程序员

iOS - regex 正则表达式简述

2016-02-05  本文已影响640人  cyh老崔

正则表达式的使用时机:

正则表达式的使用方法:

private func validateEmail(str: String) -> Bool {
        // 1.编写邮箱规则(来自Internet)
        let pattern = "^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$"
        
        // 2.根据规则创建正则表达式对象
        guard let regex = try? NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(rawValue: 0)) else {
            return false
        }
        
        // 3.根据对象匹配数据
        // range: 检验传入字符串str的哪些部分,此处为全部
        let result: Int = regex.numberOfMatchesInString(str, 
                                options: NSMatchingOptions(rawValue: 0), 
                                  range: NSMakeRange(0, str.characters.count))
        return result > 0
        
    }

Xcode提供下面几个操作正则表达式的方法:
 public func numberOfMatchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> Int
public func rangeOfFirstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSRange
public func firstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult?
public func matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> [NSTextCheckingResult]

//示例

        //根据正则表达式对象取得结果.
        let array = regex.matchesInString(str, 
                                  options: NSMatchingOptions(rawValue: 0), 
                                  range: NSMakeRange(0, 
                                  str.characters.count))
        
        //遍历结果NSRange数组,取出结果
        for result in array {
            let temp = (str as! NSString).substringWithRange(result.range)
            print(temp)
        }
如果有多个规则, 使用 "|" 连接
//1    编写正则表达式规则
//1.1  pattern1: 得到此形式文本:[n个文本].
//1.2  \w:匹配字母或数字或下划线或汉字 [a-zA-Z_0-9] 常用
//1.3  +: 重复一次或更多次
        let pattern1 = "\\[\\w+\\]"
        let pattern2 = "@\\w+:"
        let pattern3 = "#\\w+#"
        let pattern4 =  "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"
        
        // 多个规则可以使用 | 来连接
        let pattern =  pattern1 + "|" + pattern2 + "|" + pattern3 + "|" + pattern4

此外,苹果自带的探测器集成了很多正则表达式.如取出网址

let str = "@FanLu:快看网址~ http://www.jianshu.com/collection/9e553f618413 ,一起探讨文章."
        
        //2.写正则对象,根据规则
        guard let detechtor = 
        try? NSDataDetector(types: NSTextCheckingType.Link.rawValue) else {
            return
        }
        
        
        //3.取得结果,根据对象.生成的是数组
        let array = detechtor.matchesInString(str, 
                        options: NSMatchingOptions(rawValue: 0), 
                        range: NSMakeRange(0, str.characters.count))
        
        //遍历数组,取出结果
        for result in array {
            let temp = (str as! NSString).substringWithRange(result.range)
            print(temp)
        }

声明: 任何博文不可尽信,智者千虑,必有一失.何况世上有多少智者?

上一篇下一篇

猜你喜欢

热点阅读