• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift中使用正则表达式的一些方法

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了taylor swift,swift,swift code是什么意思,taylor swift好听的歌,taylor swift演唱会等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我使用Swift有段时间了,但最让人郁闷的是它还不能支持正则表达式.

先要说的是,这确实是门新语言,我在网站上有注释 a radar (rdar://17257306 for Apple folks). 如果你也认同这一观点,请支持.

我所说的正则表达式指的是这种(Ruby代码):
 

if name =~ /ski$/
 puts "#{name} is probably polish"
end
</div>

如果要快速查询,可以使用=~操作符来返回匹配的结果.此外使用/pattern/syntax 形式来直接使用正则. 除了/符号需要转义,其它符号都不受影响:

 
url_pattern = /^https?:\/\/.*/

</div>


这比使用\\转义要好得多 (这在正则里很常见). 如果正则里使用了字符串,那看起来会很糟糕.这是Objective-C代码:
 
  regularExpressionWithPattern:@"\\s+\\w{4,10}\\s\\d+"
                       options:0
                         error:nil];</div>

转义每个\符号让代码可读性变差.  更别提额外类的创建了. 当然,如果需要更强大的正则功能,那就得开发全套的特定实现类了.  但就一般情况来说 (在脚本语言里很常见) 有点小题大做.

Swift是怎么处理的?

Swift目前没有提供支持正则的语法和类,所以只能使用之前提到的NSRegularExpression来实现.

但是我们可以考虑使用swift的超强操作符来实现. 考虑下面的场景:
  class Regex {
  let internalExpression: NSRegularExpression
  let pattern: String
 
  init(_ pattern: String) {
    self.pattern = pattern
    var error: NSError?
    self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)
  }
 
  func test(input: String) -> Bool {
    let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, countElements(input)))
    return matches.count > 0
  }
}</div>

这在使用NSRegularExpression时需要提供大量的假设验证. 如果用另一种方法就简单多了:

  if Regex("\\w{4}").test("ABCD") {
  println("matches pattern")
}</div>

我们还是无可避免的得使用字符串转义,但比使用原生的NSRegularExpression好多了.

=~ 操作符

研究了一下 Step Christopher 的方法后,我想自己改造一下操作符功能. 看起来挺简单的:
  operator infix =~ {}</div>

这就定义了操作符的位置,就像操作两个元素时不是放在它们之间,而是一个元素之前或之后(就像++操作). 下面定义一个使用该操作符的函数:

  func =~ (input: String, pattern: String) -> Bool {
  return Regex(pattern).test(input)
}</div>

复杂的部分是现成的,我们只需要简单地调用.

最后,使用正则的测试结果如下:

  let phoneNumber = "(800) 555-1111"
if phoneNumber =~ "(?\\d{3})?\\s\\d{3}-\\d{4}" {
  println("That looks like a valid US phone number")
}</div>

我觉得这个结果很好,如果有天Apple发现了我的这个正则实现的语法/regex/literal syntax, 我很乐意提供支持.

更新

一个乐于助人的 Hacker News评论家  指出一个更接近我想要的方向,但使用现有的API:
  if let match = name.rangeOfString("ski$", options: .RegularExpressionSearch) {
  println("\(name) is probably polish")
}</div>

的确,我不知道这个,并且看起来非常有用。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift 环境搭建
  • Swift 基本语法
  • Swift 数据类型
  • Swift 变量
  • Swift 常量
  • Swift 运算符
  • Swift 条件语句
  • Swift 循环
  • Swift 字符串
  • Swift 字符(Character)

相关文章

  • 2017-05-28Swift开发之UITableView状态切换效果
  • 2017-05-28Swift教程之类与结构详解
  • 2017-05-28Swift教程之控制流详解
  • 2017-05-28HttpServletRequest对象方法的用法小结
  • 2017-05-28Swift教程之基础数据类型详解
  • 2017-05-28简单了解Swift语言中的break和continue语句的用法
  • 2017-05-28Servlet3.0实现文件上传的方法
  • 2017-05-28Swift代码实现冒泡排序算法的简单实例
  • 2017-05-28详解Swift中的Characters字符类型与String字符串类型
  • 2017-05-28详解Swift中enum枚举类型的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 零基础上手Swift快速入门教程概览
    • Swift 继承
    • Swift 中闭包的简单使用
    • Swift中Optional值的链式调用学习笔记
    • struts2实现多文件上传的示例代码
    • Swift实现快速排序算法的代码示例
    • Swift实现堆排序算法的代码示例
    • 查看import的类是出自哪个jar包的方法
    • Mybatis中 SQL语句复用
    • 详解Swift中的函数及函数闭包使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有