??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
swift中自定义正则表达式运算符= 详解

转载   2017-12-22   浏览量:203


什么是正则表达式?

正则表达式,又称正规表示法、常规表示法(英语: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 "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
  print("符合邮箱规则")
 } else {
  print("不符合邮箱规则")
 }

注意

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

总结

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

转载自://www.jb51.net/article/131211.htm

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



swift中自定义正则表达式运算符= 详解
这篇文章主要给大家介绍了关于swift中自定义正则表达式运算符=~的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
radosgw-admin常用操作
# 创建s3用户keyradosgw-admin key create --uid='user_id' --key-type=s3 --gen-secret  --gen-access-key# 创建swift用户keyradosgw-admin key create --
18.类的构造函数
importUIKitclassPerson:NSObject{  varname:String?  varage:Int=0     //父类的init方法,子类再来写的时候,叫做方法的重写  //如果是方法的重写,则需要在重写的方法前加o
14.类的基本定义,类型推断、安全和类型转换
/*类的基本定义Swift中的结构体和类非常相似,但是又有不同之处类是具有相同属性和方法的抽象格式:class类名称{  类的属性和方法}*/classRect{  varwidth:Double=0.0  varheight:Double=0.0  funcshow()-&g
13.函数的类型和基本使用
第一:函数类型:/*函数类型:类似于C语言的指向函数的指针类似于OC语言的block函数类型是由函数的参数类型和返回值类型组成的*///这两个函数的类型是(Int,Int)->Intfuncsum(a:Int,b:Int)->Int{returna+b;}funcsub(a:Int,b:Int)->Int{returna-b;}//可以
07.guard必须用在函数
//1.guard必须用在函数letage=20funconline(age:Int){  //如果条件成立,者会执行后面的代码块  //如果条件不成立,则会执行{}中的语句,并且{}中必须跟上  guardage>=18else{    pr
2015年Objective-C有哪些新功能?
虽然iOS开发出了新的swift语言,但是绝大部分老iOS开发从业者及新入门者,都没有放弃对Objective-C语言的使用和学习。所以苹果公司在今天也对Objective-C做了一些升级,以往这门语言的使用“局限”将不复存在。下面我们就一起来看下,今年Objective-C语言做了升级。
xcode经验汇总(持续更新中)
使用命令行编译,创建main.m文件,写个NSLog语句(需要Foundation头文件),用clang编译不过。解决办法是:clang-frameworkFoundationmain.m-omain,或者-fmodulesFoundation(代码中用@importFoundation;而不是#import<Foundation/Foundation.h>文本搜索选
开发语言的时间戳(timestamp)
总结下各类语言的时间戳---Timestamp
map函数,Optional函数
letnumbers=[1,2,3]letdoubledNumbers=numbers.map{$0*2}//doubledNumbers:&nbsp;2,&nbsp;4,&nbsp;6二、AnyObject与AnyObject!的区别Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型,包括类实例与结构体实例。Any是一个别名。AnyObject