• Swift虽然是一个新出的语言,但却不提供专门的处理正则的语法和类。所以我们只能使用古老的NSRegularExpression类进行正则匹配。 即先接受一个正则表达式的字符串,由此生成NSRegularExpression对象,再用该对象来...

    Swift虽然是一个新出的语言,但却不提供专门的处理正则的语法和类。所以我们只能使用古老的NSRegularExpression类进行正则匹配。
    即先接受一个正则表达式的字符串,由此生成NSRegularExpression对象,再用该对象来匹配输入字符串,返回匹配结果。

    1,为便于使用,定义一个正则匹配工具类(内部封装使用NSRegularExpression)
    代码如下

    import Foundation
    
    struct MyRegex {
        let regex: NSRegularExpression?
    
        init(_ pattern: String) {
            regex = try? NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
        }
    
        func match(input: String) -> Bool {
            if let matches = regex?.matchesInString(input,
                options: [],
                range: NSMakeRange(0, (input as NSString).length)) {
                    return matches.count > 0
            }
            else {
                return false
            }
        }
    }
    
    import UIKit
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let mailPattern = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
            let matcher = MyRegex(mailPattern)
            let maybeMailAddress = "admim"
            if matcher.match(maybeMailAddress) {
                print("邮箱地址格式正确")
            }
            else{
                print("邮箱地址格式有误")
            }
        }
    }

    2,自定义 =~ 运算符,方便正则匹配
    像Ruby和Perl这样的语言,都有专门的=~运算符来进行正则匹配。而在Swift中,我们可以通过操作符的重载来实现。

    import Foundation
    struct MyRegex {
        let regex: NSRegularExpression?
    
        init(_ pattern: String) {
            regex = try? NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
        }
    
        func match(input: String) -> Bool {
            if let matches = regex?.matchesInString(input,
                options: [],
                range: NSMakeRange(0, (input as NSString).length)) {
                    return matches.count > 0
            }
            else {
                return false
            }
        }
    }
    infix operator =~ {
    associativity none
    precedence 130
    }
    
    func =~ (lhs: String, rhs: String) -> Bool {
        return MyRegex(rhs).match(lhs) //需要前面定义的MyRegex配合
    }
    
    import UIKit
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            if "admin@hangge.com" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"{
                print("邮箱地址格式正确")
            }else{
                print("邮箱地址格式有误")
            }
        }
    }

    3,其他常用格式验证的正则表达式
    举例使用如下

    //用户名验证(允许使用小写字母、数字、下滑线、横杠,一共3~16个字符)
    ^[a-z0-9_-]{3,16}$
    
    //Email验证
    ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
    
    //手机号码验证
    ^1[0-9]{10}$
    
    //URL验证
    ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
    
    //IP地址验证
    ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
    
    //html标签验证
    ^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
    展开全文
  • Swift中使用正则表达式 环境:swift3 xcode8 一、什么时候我们需要使用正则表达式 1.判断一些字符是否符合所需要求; 2.用于检索文本中所需字段。 二、正则表达式的语法 正则表达式的创建传送门:...

    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
        }
    
    常用的就是这三种方式中使用正则表达式字符串 ,其中第一、二种较为方便的判断是否含有值,和只匹配一次的情况,而第三种可以匹配返回多个目的值。


    展开全文
  • 1.什么是正则表达式 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法...

    1.什么是正则表达式

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
    正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
    在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

    2.正则表达式的字符组成

    普通字符【a~z】、特殊字符(称为"元字符")

    3.支持

    几乎所有的程序设计语言都支持正则表达式,例如:OC,swift,java,c#,python,js等
    在很多文本编辑器里,可以使用正则表达式进行检索,Xcode同样支持正则表达式!

    4.使用

    • 匹配
      (pattern) 匹配pattern并获取这一匹配,所获取的匹配可以从产生的Matches集合得到
    • 集合
      [xyz] 字符集合(x||y||z)
      [a-z] 字符范围a-z
      [a-zA-Z] 字符范围a-z A-Z
      [^xyz] 负值字符集合 (任何字符, 除了xyz)
      [^a-z] 负值字符范围
      [a-d][m-p] 并集(a到d 或 m到p)
    • 常用元字符
      . 匹配除换行符以外的任意字符
      \w 匹配字母或数字或下划线或汉字 [a-zA-Z_0-9]
      \s 匹配任意的空白符(空格、TAB\t、回车\r \n
      \d 匹配数字 [0-9]
      ^a 匹配字符串的开始a字符
      a$ 匹配字符串的结束a字符
      \bw 匹配单词的开始或结束w字符
    • 常用反义符
      \W 匹配任意不是字母,数字,下划线,汉字的字符[^\w]
      \S 匹配任意不是空白符的字符 [^\s]
      \D 匹配任意非数字的字符[^0-9]
      \Ba 匹配不是单词开头或结束的位置的a字符
      [^a] 匹配除了a以外的任意字符
      [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
    • 常用限定符
      w*oo 重复零次或更多次
      w+oo 重复一次或更多次
      w?oo 重复零次或一次
      w{n} w重复n次
      w{n,} w重复n次或更多次
      w{n,m} w重复n到m次
    • 贪婪和懒惰
      *? 重复任意次,但尽可能少重复
      *+ 重复1次或更多次,但尽可能少重复
      ?? 重复0次或1次,但尽可能少重复
      w{1,2}? 重复1到2次,但尽可能少重复
      ww{1,}? 重复1次以上,但尽可能少重复

    5.实例

     1 // 判断QQ号码(常规判断)
     2 
     3  fileprivate func checkIsQQNumber(str:String) ->Bool {
     4      // 1.判断是否以0开头
     5      if str.hasPrefix("0"){
     6          return false
     7      }
     8 
     9      // 2.判断是否是5~15位
    10      if str.characters.count < 5 || str.characters.count > 15{
    11          return false
    12      }
    13 
    14      // 3.判断是否全部都是数字
    15      for c in str.characters{
    16          if c < "0" || c > "9"{
    17              return false
    18          }
    19      }
    20      return true
    21  }
    22 // 正则判断手机号码
    23 
    24  fileprivate func checkPhoneNumber(str:String)->Bool {
    25      let pattern = "1[3578]\\d{9}"
    26 
    27      let regex = try! NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options(rawValue:0))
    28      let res = regex.matches(in: str, options: NSRegularExpression.MatchingOptions(rawValue:0), range: NSMakeRange(0, str.characters.count))
    29      if res.count > 0 {
    30          return true
    31      }
    32      return false
    33  }

     

     

    转载于:https://www.cnblogs.com/lurenq/p/7458605.html

    展开全文
  • 如果你不知道什么是正则表达式,你可以跟我着我的代码学,或者直接看[这篇文章](https://deerchao.net/tutorials/regex/regex.htm),这是我见过讲的最详细的一篇文章。 首先从最基本的用法开始说起: let string = ...
    如果你不知道什么是正则表达式,你可以跟我着我的代码学,或者直接看[这篇文章](https://deerchao.net/tutorials/regex/regex.htm),这是我见过讲的最详细的一篇文章。
    

    首先从最基本的用法开始说起:

            let string = "ab123cdefg456hijk"
    
            let expression = "\\d"//创建表达式,\d是专门匹配数字的,等效于[0-9],注意:我们用的时候记得再前面多加个"\"。
    
            let regex = try! NSRegularExpression(pattern: expression, options: .allowCommentsAndWhitespace)//生成NSRegularExpression实例
    
            let numberOfMatches = regex.numberOfMatches(in: string, options:.reportProgress, range: NSMakeRange(0, (string as NSString).length))//匹配到数字的个数
    
            print(numberOfMatches)// 6

    接下来结合实际需求来介绍,有时候我们需要限制输入框只能输入特定的字符串,比如只能输入小数点后两位,这里我们需要调用 UITextField 协议里的一个方法: func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool ,这个方法会在我们输入文字的时候调用,如果返回 false 则输入框不会显示任何文字,我们就可以在这个方法里对我们输入的文字做正则匹配,如果不满足就返回 false,代码:

        func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
            let str = (textField.text! as NSString).replacingCharacters(in: range, with: string)//获取输入框接收到的文字
    
            let expression = "^\\d*\\.?\\d{0,2}$"//创建表达式,"*"表示重复0次或更多次,"."表示匹配除换行符以外的任意字符,如果我们想直接匹配"."本身,就得在前边加转义符\\,"?"表示重复01次,{0,2}表示重复02次,"^","$"分别匹配字符串的开始和末尾,所以整个意思就是,匹配可重复出现的数字+一个"."+两个数字
    
            let regex = try! NSRegularExpression(pattern: expression, options: .allowCommentsAndWhitespace)//生成NSRegularExpression实例
    
            let numberOfMatches = regex.numberOfMatches(in: str, options:.reportProgress, range: NSMakeRange(0, (str as NSString).length))//获取匹配的个数
    
            return numberOfMatches != 0//如果匹配数量为0则表示不符合输入要求
        }

    再比如我们在写手机登录的时候,我们需要用户输入正确的手机号按钮才能生效,具体实现方法:

    class ViewController: UIViewController{
        var loginBtn:UIButton!
        var textField:UITextField!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            loginBtn = UIButton(frame: CGRect(x: 100, y: 150, width: 60, height: 40))
            loginBtn.setTitle("Login", for: .normal)
            loginBtn.backgroundColor = UIColor.lightGray
            loginBtn.isEnabled = false
            loginBtn.addTarget(self, action: #selector(login), for: .touchUpInside)
            view.addSubview(loginBtn)
    
            textField = UITextField(frame: CGRect(x: 100, y: 100, width: 200, height: 20))
            textField.borderStyle = .roundedRect
            textField.keyboardType = .numberPad//设置键盘类型为数字键盘
            view.addSubview(textField)
    
            NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: .UITextFieldTextDidChange, object: nil)//观察是否有文字输入
        }
    
        func textDidChange(){
            if let str = textField.text{
                let expression = "^((13\\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[^14]))\\d{8}$"//"|"表示什么就不用说了吧,[5|7]表示满足其中任意一个即匹配,数量唯一,"[0-3]"则表示满足0到之间的数字即匹配,数量唯一,[^14]表示匹配除14以外的任意字符,这里包括了字母,所以建议弹出键盘类型为数字键盘
    
                let regex = try! NSRegularExpression(pattern: expression, options: .allowCommentsAndWhitespace)//生成NSRegularExpression实例
    
                let numberOfMatches = regex.numberOfMatches(in: str, options:.reportProgress, range: NSMakeRange(0, (str as NSString).length))//获取匹配的个数
    
                if numberOfMatches != 0{//如果匹配,则登录按钮生效,否则反之
                    loginBtn.backgroundColor = UIColor.brown
                    loginBtn.isEnabled = true
                }else{
                    loginBtn.backgroundColor = UIColor.lightGray
                    loginBtn.isEnabled = false
                }
            }
        }
    
        func login(){
            let alert = UIAlertController(title: nil, message: "login", preferredStyle: .alert)
            let confirm = UIAlertAction(title: "确认", style: .default, handler: nil)
            alert.addAction(confirm)
            present(alert, animated: true, completion: nil)
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }

    效果:
    这里写图片描述

    暂且就先写到这吧

    展开全文
  • Swift4 正则表达式

    2019-03-22 11:51:26
    基本字符 (单个字符) 不需要转义的字符 类别 符号 大写字母 ABCDEF...XYZ 小写字母 abcdef...xyz 数字 0123456789 其他 `~!@#%&;:'",<>... 三反斜杠转义 『\\...

    基本字符 (单个字符)

    • 不需要转义的字符
    类别 符号
    大写字母 ABCDEF...XYZ
    小写字母 abcdef...xyz
    数字 0123456789
    其他 `~!@#%&;:'",<>/
    • 需要进行转义的其他字符
    转义方法 符号
    双反斜杠转义 『\\』 $^*()-=+[{]}|.?
    三反斜杠转义 『\\\\』 \

    元字符 (单类字符)

    符号 类别
    . 除换行符外的任意字符
    \\w 字母、数字、下划线或汉字
    \\s 任意空白字符,包括换页符、换行符、回车符、制表符、空格
    \\d 数字
    \\f 换页符
    \\n 换行符
    \\r 回车符
    \\t 制表符
    \\v 垂直制表符

    反义(元字)符

    符号 类别
    \\W 非字母、数字、下划线或汉字
    \\S 非空白字符
    \\D 非数字字符
    ^ 非后接的字符,可同时接多个字符

    限定字符

    • 接在字符或字符表达式后以对其进行限定修饰

    贪婪限定字符

    • 当匹配符合多种情况时优先字符数多的情况
      字符串 :"123456789"
      正 则 :"^\d+"
      结 果 :123456789
    符号 意义
    * 重复单字符或表达式零次以上(包括零次)
    + 重复单字符或表达式一次以上(包括一次)
    ? 重复单字符或表达式零或一次
    {n} 重复单字符或表达式n次
    {n,} 重复单字符或表达式n次以上(包括n次)
    {n,m} 重复单字符或表达式n到m次

    懒惰限定符

    • 当匹配符合多种情况时优先字符数少的情况
      字符串 :"123456789"
      正 则 :"^\d+?"
      结 果 :1
    符号 意义
    *? 重复单字符或表达式零次以上(包括零次)
    +? 重复单字符或表达式一次以上(包括一次)
    ?? 重复单字符或表达式零或一次
    {n,}? 重复单字符或表达式n次以上(包括n次)
    {n,m}? 重复单字符或表达式n到m次

    定位符

    符号 意义
    ^ 字符串的开始
    $ 字符串的结束
    \\b 单词开始或结束
    \\B 非单词开头或结束的字符

    连接符

    符号 意义
    | 用于连接两个字符或表达式,可理解为『或』
    , 用于连接两个字符,可理解为『或』
    - 用于选取一个字符域

    分隔符

    • 对单个字符或表达式等进行分隔
    符号 意义
    [] 单字符分隔符 :对单字符进行分隔
    () 表达式分隔符 :对表达式进行分隔
    {} 限定符分隔符 :对限定符进行分隔

    正则实例

    • 2到6位字母或数字组成的字符串
    ^ [a-z,A-Z,0-9]|{2,6} $
    2到6位字母或数字
    • 车牌号
    ^ [a-z,A-Z]{1} [a-z,A-Z,\\d]|{5,} $
    1位字母 5位及以上字母或数字
    • 验证邮箱
    ^ [A-Z0-9a-z._% -] @ [A-Za-z0-9.-] \\.[A-Za-z]{2,4} $
    字母、数字和._%- @ 字母、数字和.- .和2~4位数字

     

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 简而言之,正则表达式(简称regexes或regexp)是指定字符串模式的一种方式。 您无疑熟悉您喜欢的文本编辑器或IDE中的搜索和替换功能。 您可以搜索确切的单词和短语。 您还可以激活选项,例如不区分大小写,以便搜索...
  • Swift 正则表达式

    2019-08-07 09:27:51
    swift正则表达式,可以自定义一个类,方便调用 class Regex { let internalExpression: NSRegularExpression let pattern: String init(_ pattern: String) { self.pattern = pattern var error: NSError? ...
  • 在这篇教程中,你将学习如何在 iOS app 中使用 Swift 4.2 实现正则表达式。 更新说明:Tom Elliott 将本教程升级至 Swift 4.2。原文作者是 James Frost。 正则表达式基础 如果你没有听过正则表达式——也...
  • NSDataDetector是继承NSRegularExpression(iOS中的正则表达式)的一个子类,你可以把它看作一个正则表达式匹配器和令人难以置信的复杂的表达式,可以从自然语言(虽然可能更复杂)中提取你想要的信息。主要用于检测半...
  • 要匹配字符串里的URL链接地址,我们可以使用 NSRegularExpression 进行正则匹配,具体用法可以看我原来写的这篇文章:Swift - 正则表达式的使用(附用户名、邮箱、URL等常用格式验证) 但使用 ...
  •  这是一个 Swift 版的正则表达式的使用和解读。一共有三种使用的方法。和一些常用的正则表达式。 第一:首先看一个枚举 简介:它是一个写在oc里面的一个枚举,但是它使用在Swift和OC之间。 实例: // //...
  • 准备工作使用RegexKitLite正则表达式需要以下工作: 1.RegexKitLite官方网址(内含使用教程):http://regexkit.sourceforge.net/RegexKitLite 2.下载地址:...
  • 正则表达式

    2018-10-11 02:41:26
    正则表达式 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序...
  • iOS中的正则表达式

    2016-03-01 10:56:35
    在iOS中,系统自带的正则类是 NSRegularExpression初始化 + (nullable NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)...
  • 正则表达式 编辑 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 许多...
  • 以前做验证邮箱,电话号码的时候通常用第三方的正则表达式或者NSPredicate(点这里查看以前的文章),在后期,苹果推出了自己的正则表达式来提供给开发者调用,很方便,功能也强大.  具体可以查看官方文档,包括如何书写...
  • 正则表达式  编辑 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个...
  • 杂项:正则表达式

    2019-07-31 03:27:00
    ylbtech-杂项:正则表达式 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)...
1 2 3 4 5 ... 20
收藏数 1,143
精华内容 457
热门标签
关键字:

swift 正则实例