swift中自定义正则表达式运算符=~详解
什么是正则表达式?
正则表达式,又称正规表示法、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
swift至今并没有在语言层面上支持正则表达式,可能在开发app时正则表达式使用的场景并不多。
封装
在Cocoa中我们可以使用NSRegularExpression来做正则匹配,所以我们在NSRegularExpression的基础上封装一个RegularExpHelper配匹一个字符串是否符合某个正则表达式。
structRegularExpHelper{ letRegularExp:NSRegularExpression init(_pattern:String)throws{ tryRegularExp=NSRegularExpression(pattern:pattern,options:.caseInsensitive) } funcmatch(inpuut:String)->Bool{ letmatches=RegularExp.matches(in:inpuut,options:[],range:NSMakeRange(0,inpuut.count)) returnmatches.count>0 } }
自定义=~
有了封装好的RegularExpHelper,我们就可以方便的自定义运算符了。
infixoperator=~:ATPrecedence precedencegroupATPrecedence{ associativity:none higherThan:AdditionPrecedence lowerThan:MultiplicationPrecedence } func=~(input:String,RegularExp:String)->Bool{ do{ returntryRegularExpHelper(RegularExp).match(inpuut:input) }catch_{ returnfalse } }
运算符定义
- 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的操作符是不能定义在局部域中的,因为操作符是需要在全局范围内使用的。
- 重载和自定义操作符存在很多风险,使用前请多问问自己是否真的需要这么做!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。