swift中自定义正则表达式运算符=~详解

 更新时间:2017年12月22日 08:34:03   作者:Inlight先森  
这篇文章主要给大家介绍了关于swift中自定义正则表达式运算符=~的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

什么是正则表达式?

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

swift 至今并没有在语言层面上支持正则表达式,可能在开发app时正则表达式使用的场景并不多。

封装

在 Cocoa 中我们可以使用 NSRegularExpression 来做正则匹配,所以我们在 NSRegularExpression 的基础上封装一个 RegularExpHelper 配匹一个字符串是否符合某个正则表达式。

struct RegularExpHelper {
 let RegularExp: NSRegularExpression 
 init(_ pattern: String) throws {
  try RegularExp = NSRegularExpression(pattern: pattern, options: .caseInsensitive)
 } 
 func match(inpuut: String) -> Bool {
  let matches = RegularExp.matches(in: inpuut, options: [], range: NSMakeRange(0, inpuut.count))
  return matches.count > 0
 }
}

自定义 =~

有了封装好的 RegularExpHelper,我们就可以方便的自定义运算符了。

infix operator =~ : ATPrecedence
precedencegroup ATPrecedence {
 associativity: none
 higherThan: AdditionPrecedence
 lowerThan: MultiplicationPrecedence
}
func =~ (input: String, RegularExp: String) -> Bool {
 do {
  return try RegularExpHelper(RegularExp).match(inpuut: input)
 } catch _ {
  return false
 }
}

运算符定义

  • infix 表示定义一个中位操作符(前后都是输入)
  • prefix 表示定义一个前位操作符(前是输入)
  • postfix 表示定义一个后位操作符(后是输入)

associativity 结合律

即多个同类的操作符顺序出现时的计算顺序

  • left (从左往右的顺序)
  • right(从右往左的顺序)
  • none(默认就为 none,不会再结合)

优先级

  • higherThan 优先级高于 AdditionPrecedence 这个是加法的类型
  • lowerThan 优先级低于 MultiplicationPrecedence 乘除

然后我们就可以使用了

 if "88888888@qq.com" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
  print("符合邮箱规则")
 } else {
  print("不符合邮箱规则")
 }

注意

  • 使用正则表达式字符串时注意转义字符的使用。
  • swift 的操作符是不能定义在局部域中的,因为操作符是需要在全局范围内使用的。
  • 重载和自定义操作符存在很多风险,使用前请多问问自己是否真的需要这么做!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • OpenStack的Swift组件详解

    OpenStack的Swift组件详解

    这篇文章主要介绍了OpenStack的Swift组件,对swift感兴趣的同学,可以参考下
    2021-04-04
  • Swift编程中用以管理内存的自动引用计数详解

    Swift编程中用以管理内存的自动引用计数详解

    这篇文章主要介绍了Swift编程中用以管理内存的自动引用计数详解,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • Swift 3.1聊天界面键盘效果的实现详解

    Swift 3.1聊天界面键盘效果的实现详解

    这篇文章主要给大家介绍了Swift 3.1聊天界面键盘效果实现的相关资料,文中介绍的非常详细,相信对大家的学习或者工作具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • 通过Notification.Name看Swift是如何优雅的解决String硬编码

    通过Notification.Name看Swift是如何优雅的解决String硬编码

    这篇文章主要给大家介绍了通过Notification.Name看Swift是如何优雅的解决String硬编码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • swift 3.0中实现字符串截取、比较的方法示例

    swift 3.0中实现字符串截取、比较的方法示例

    时,为了使用现有的字符串生成一个新的字符串,我们可以使用截取字符串的方法实现。下面这篇文章主要给大家介绍了关于swift 3.0中实现字符串截取的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴。
    2017-10-10
  • iPhone与iWatch连接、控制、数据传递(Swift)的方法

    iPhone与iWatch连接、控制、数据传递(Swift)的方法

    这篇文章主要介绍了iPhone与iWatch连接、控制、数据传递(Swift)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Swift 3.0基础学习之下标

    Swift 3.0基础学习之下标

    这篇文章主要介绍了Swift 3.0基础学习之下标的相关资料,文中介绍的非常详细,对大家学习或者使用swift具有一定的参考价值,需要的朋友下面来一起看看吧。
    2017-03-03
  • Swift TableView实现冻结窗格功能

    Swift TableView实现冻结窗格功能

    这篇文章主要为大家详细介绍了Swift TableView实现冻结窗格功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Swift hello world!Swift快速入门教程

    Swift hello world!Swift快速入门教程

    这篇文章主要介绍了Swift hello world!Swift快速入门教程,本文在快速了解Swift编程语言,需要的朋友可以参考下
    2014-07-07
  • Swift解决UITableView空数据视图问题的简单方法

    Swift解决UITableView空数据视图问题的简单方法

    这篇文章主要给大家介绍了关于Swift解决UITableView空数据视图问题的简单方法,文中通过示例代码介绍的非常详细,对大家学习或者使用swift具有一定的参考学习价值,需要的朋友可以参考下
    2018-10-10

最新评论