Swift中使用正则表达式

Swift中使用正则表达式

环境:swift3 xcode8

一、什么时候我们需要使用正则表达式

1.判断一些字符是否符合所需要求;
2.用于检索文本中所需字段。

二、正则表达式的语法

正则表达式的创建传送门:http://www.runoob.com/regexp/regexp-syntax.html

常用的正则表达式参考:http://www.jb51.net/article/72867.htm

三、iOS中常用的正则表达式方式

1.在NSpredicate中使用

let email = "lifusc464@qq.com"
let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
let isValid = predicate.evaluate(with: email)
print(isValid ? "正确的邮箱地址" : "错误的邮箱地址")


2.利用String的RangeOfString: option: 直接查找

        let email = "lifusc148387@qq.com"
        let rangeindex = email.range(of: "[0-9]{4}", options: .regularExpression, range: email.startIndex..<email.endIndex, locale:Locale.current)
        print(email.substring(with: rangeindex!)) //输出;1483
       注意使用的option参数为regularExpression  , 还有range参数是一个半闭String.index    location指的是语言环境,一般为current

3.利用系统自带的正则表达式类NSRegularExpression

   /**
     正则表达判断是否含有结果值
     - parameter pattern: 一个字符串类型的正则表达式
     - parameter str: 需要比较判断的对象
     - returns: 返回布尔值判断结果
     - warning: 注意匹配到结果的话就会返回true,没有匹配到结果就会返回false
     */
    class func regex(pattern:String, str:String) -> Bool {
        let regex = try! NSRegularExpression(pattern: pattern, options:[NSRegularExpression.Options.caseInsensitive])
        let resultNum = regex.numberOfMatches(in: str, options: NSRegularExpression.MatchingOptions(rawValue: 0) , range: NSMakeRange(0, str.characters.count))
        if resultNum>=1 {
            return true
        }
        return false
    }

   /**
     正则表达式获取目的值
     - parameter pattern: 一个字符串类型的正则表达式
     - parameter str: 需要比较判断的对象
     - imports: 这里子串的获取先转话为NSString的[以后处理结果含NS的还是可以转换为NS前缀的方便]
     - returns: 返回目的字符串结果值数组(目前将String转换为NSString获得子串方法较为容易)
     - warning: 注意匹配到结果的话就会返回true,没有匹配到结果就会返回false
     */
    class func regexGetSub(pattern:String, str:String) -> [String] {
        var subStr = [String]()
        let regex = try! NSRegularExpression(pattern: pattern, options:[NSRegularExpression.Options.caseInsensitive])
        let results = regex.matches(in: str, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSMakeRange(0, str.characters.count))
        //解析出子串
        for  rst in results {
            let nsStr = str as  NSString  //可以方便通过range获取子串
            subStr.append(nsStr.substring(with: rst.range))
            //str.substring(with: Range<String.Index>) //本应该用这个的,可以无法直接获得参数,必须自己手动获取starIndex 和 endIndex作为区间
        }
        return subStr
    }
常用的就是这三种方式中使用正则表达式字符串 ,其中第一、二种较为方便的判断是否含有值,和只匹配一次的情况,而第三种可以匹配返回多个目的值。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值