iOS - regex 正则表达式简述

正则表达式的使用时机:

  • 从一组字符串中, 判断是否含有某组(个)特定的字符串.如:
  • 判断某字符串是否含有某组字符串:电话号码/邮箱/QQ号码,等等
  • 判断某字符串是否含有某个字符:"[", "%", "$", 等等

正则表达式的使用方法:

  • 正则表达式的使用只有3步:

  • 1.编写正则表达式规则

  • 2.根据规则创建正则表达式对象

  • 3.根据对象匹配数据

  • 而各种常见的规则在网上已被各路大神写好,95%的coder只要复制就可以了, I am included.

  • 下面是一个"简单"的示例方法,匹配邮箱

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)
        }

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

  • 欢迎探讨,欢迎拍砖.不过这篇好像没什么深度可拍的.

你可能感兴趣的:(iOS - regex 正则表达式简述)