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 的操作符是不能定义在局部域中的,因为操作符是需要在全局范围内使用的。
  • 重载和自定义操作符存在很多风险,使用前请多问问自己是否真的需要这么做!

总结

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

时间: 2017-12-21

swift中的正则表达式小结

作为一门先进的编程语言,Swift 可以说吸收了众多其他先进语言的优点,但是有一点却是让人略微失望的,就是 Swift 至今为止并没有在语言层面上支持正则表达式. 正则表达式的用处: 判断给定的字符串是否符合某一种规则(专门用于操作字符串) - 电话号码,电子邮箱,URL... - 可以直接百度别人写好的正则 - 别人真的写好了,而且测试过了,我们可以直接用 - 要写出没有漏洞正则判断,需要大量的测试,通常最终结果非常负责 过滤筛选字符串,网络爬虫 替换文字,QQ聊天,图文混排 语法规则 使用过

在Swift中如何使用正则表达式详解

前言 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式(Regular expression, regex)允许我们在几秒钟内在成千上万文档间进行复杂检索与替换,自从诞生50多年来它依旧广泛使用. Swift虽然是一个新出的语言,但却不提供专门的处理正则的语法和类.所以我们只能使用古老的NSRegularExpression类进行

Swift中使用正则表达式的一些方法

我使用Swift有段时间了,但最让人郁闷的是它还不能支持正则表达式. 先要说的是,这确实是门新语言,我在网站上有注释 a radar (rdar://17257306 for Apple folks). 如果你也认同这一观点,请支持. 我所说的正则表达式指的是这种(Ruby代码): if name =~ /ski$/ puts "#{name} is probably polish" end 如果要快速查询,可以使用=~操作符来返回匹配的结果.此外使用/pattern/syntax 形

swift 3.0 正则表达式查找/替换字符的实现代码

1.什么是正则表达式 正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 2.正则表达式的字符组成 普通字符[a~z].特殊字符(称为"元字符") 3.支持 几乎所有的程序设计语言都支持正则表达式,例如:OC,swift,java,c#,

java实现查找替换功能

本文实例为大家分享了java实现查找替换功能的具体代码,供大家参考,具体内容如下 查找 if(searchTxt.getText().equals("")){ JOptionPane.showMessageDialog(null, "查找内容不能为空!"); }else if(!searchTxt.getText().equals("")){ //searchDialog.dispose(); if(fileChoose.focus == 1){

Ubuntu 16.04上安装 Swift 3.0及问题解答

我们对"让 Swift 3.0 在更多的 Linux 系统上运行"这件事充满了热情,因此我们开始在 Ubuntu 16.04,即 Xenial Xerus,X86 系统上构建 Swift 3.0.安装过程十分简单,只需要添加我们的 APT 仓库,并使用 apt-get 就可以了.二进制文件会被安装到 /opt/swift/swift-3.0 目录下,所以在安装 3.0 版本后需要更新 path 路径.编辑手记:对于我们为什么使用 /opt/swift 而不是 /usr/bin/ 目录,

如何在PHP中使用正则表达式进行查找替换

1. preg_match - 执行一个正则表达式匹配int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )搜索subject与pattern给定的正则表达式的一个匹配. pattern:要搜索的模式,字符串类型.subject :输入字符串. matches:如果提供了参数matches,它将被填充为搜索结果. $matche

Vim中查找替换及正则表达式的使用详解

前言 正则表达式是文本处理领域中的一个强大的工具,它可以让文本处理的能力呈指数级的提升,如果一款文本编辑器不支持正则表达式,那么它就算不上是一个现代化的编辑器,这绝非虚言. 下面这篇文章主要跟大家介绍了关于Vim查找替换及正则表达式使用的相关内容,分享出来供大家参考学习,下面来一起看看吧. 简单替换表达式 :[range]s/from/to/[flags] range:搜索范围,如果没有指定范围,则作用于但前行. :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索

Python 实用技巧之正则表达式查找和替换文本的操作方法

1.需求 我们想对字符串中的文本做查找和替换. 2.解决方案 对于简单的文本模式,使用str.replace()即可. 例如: text='mark ,帅哥,18,183 帅,mark' print(text.replace('18','19')) print(text) 运行结果: mark ,帅哥,19,193 帅,mark mark ,帅哥,18,183 帅,mark 针对更为复杂的模式,可以使用re模块中的sub()函数. 实例:将日期格式从"11/28/2018"改为&quo

批量文件查找替换功能的vbs脚本

'============================================ 'code by lcx 修改网上原有的一个小程序,不知作者,那个程序没有对目录实现递归查找 '将本程序放在你要查找的目录下,或把查找的目录拖到此脚本上,估计还有bug '======================================================================================= On Error Resume next Do Until 

js正则表达式replace替换变量方法

JavaScript正则实战(会根据最近写的不断更新) 1.javascript 正则对象替换创建 和用法: /pattern/flags 先简单案例学习认识下replace能干什么 正则表达式构造函数: new RegExp("pattern"[,"flags"]); 正则表达式替换变量函数:stringObj.replace(RegExp,replace Text); 参数说明: pattern -- 一个正则表达式文本 flags -- 如果存在,将是以下值:

JS基于正则表达式的替换操作(replace)用法示例

本文实例讲述了JS基于正则表达式的替换操作(replace)用法.分享给大家供大家参考,具体如下: 正则表达式替换使用的是replace()方法.Replace()方法是用一些字符途欢另一些字符 语法:stringObject.replace(regexp,replacement) regexp 必需.规定了要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定