版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、swift中的正则表达式小结swift中的正则表达式小结正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。作为一门先进的编程语言,Swift 可以说吸收了众多其他先进语言的优点,但是有一点却是让人略微失望的,就是 Swift 至今为止并没有在语言层面上支持正则表达式。正则表达式的用处:判断给定的字符串是否符合某一种规则(专门用于操作字符串)- 电话号码,电子邮箱,URL.- 可以直接百度别人写好的正则- 别人真的写好了,而且测试过了,我们可以
2、直接用- 要写出没有漏洞正则判断,需要大量的测试,通常最终结果非常负责过滤筛选字符串,网络爬虫替换文字,QQ聊天,图文混排语法规则使用过程1、创建规则2、创建正则表达式对象3、开始匹配代码示例?123456789101112131415161718private func check(str: String) / 使用正则表达式一定要加try语句do / - 1、创建规则let pattern = "1-90-94,14"/ - 2、创建正则表达式对象let regex = try NSRegularExpression(pattern: pattern, options:
3、 NSRegularExpressionOptions.CaseInsensitive)/ - 3、开始匹配let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count)/ 输出结果for checkingRes in res print(str as NSString).substringWithRange(checkingRes.range)catch print(error)其他几个常用方法 ?12345678
4、910/ 匹配字符串中所有的符合规则的字符串, 返回匹配到的NSTextCheckingResult数组public func matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult / 按照规则匹配字符串, 返回匹配到的个数public func numberOfMatchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> Int/ 按照规则匹
5、配字符串, 返回第一个匹配到的字符串的NSTextCheckingResultpublic func firstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult?/ 按照规则匹配字符串, 返回第一个匹配到的字符串的范围public func rangeOfFirstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSRange使用子类
6、来匹配日期、地址、和URL看官网文档解释,可以知道这个 NSDataDetector 主要用来匹配日期、地址、和URL。在使用时指定要匹配的类型?1234567891011public class NSDataDetector : NSRegularExpression / all instance variables are private/* NSDataDetector is a specialized subclass of NSRegularExpression. Instead of finding matches to regular expression patterns, i
7、t matches items identified by Data Detectors, such as dates, addresses, and URLs. The checkingTypes argument should contain one or more of the types NSTextCheckingTypeDate, NSTextCheckingTypeAddress, NSTextCheckingTypeLink, NSTextCheckingTypePhoneNumber, and NSTextCheckingTypeTransitInformation. The
8、 NSTextCheckingResult instances returned will be of the appropriate types from that list.*/public init(types checkingTypes: NSTextCheckingTypes) throwspublic var checkingTypes: NSTextCheckingTypes get / 这个是类型选择public static var Date: NSTextCheckingType get / date/time detectionpublic static var Addr
9、ess: NSTextCheckingType get / address detectionpublic static var Link: NSTextCheckingType get / link detectionNSDataDetector 获取URL示例?1234567891011121314151617181920/*匹配字符串中的URLS- parameter str: 要匹配的字符串*/private func getUrl(str:String) / 创建一个正则表达式对象do let dataDetector = try NSDataDetector(types: NSTe
10、xtCheckingTypes(NSTextCheckingType.Link.rawValue)/ 匹配字符串,返回结果集let res = dataDetector.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count)/ 取出结果for checkingRes in res print(str as NSString).substringWithRange(checkingRes.range)catch print(error)&qu
11、ot;.*?" 可以满足一些基本的匹配要求如果想同时匹配多个规则 ,可以通过 "|" 将多个规则连接起来将字符串中文字替换为表情?12345678910111213141516171819202122232425/*显示字符中的表情- parameter str: 匹配字符串*/private func getEmoji(str:String) let strM = NSMutableAttributedString(string: str)do let pattern = ".*?"let regex = try NSRegularExpre
12、ssion(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count)var count = res.count/ 反向取出文字表情while count > 0 let checkingRes = res-countlet tempStr = (str as NSSt
13、ring).substringWithRange(checkingRes.range)/ 转换字符串到表情if let emoticon = EmoticonPackage.emoticonWithStr(tempStr) print(emoticon.chs)let attrStr = EmoticonTextAttachment.imageText(emoticon, font: 18)strM.replaceCharactersInRange(checkingRes.range, withAttributedString: attrStr)print(strM)/ 替换字符串,显示到la
14、belemoticonLabel.attributedText = strMcatch print(error)TextKit 给URL高亮显示主要用到三个类NSTextStorage NSLayoutManager NSTextContainer自定义UILabel来实现url高亮1、定义要用到的属性?1234567891011121314151617181920212223242526/*只要textStorage中的内容发生变化, 就可以通知layoutManager重新布局layoutManager重新布局需要知道绘制到什么地方, 所以layoutManager就会文textConta
15、iner绘制的区域*/ 准们用于存储内容的/ textStorage 中有 layoutManagerprivate lazy var textStorage = NSTextStorage()/ 专门用于管理布局/ layoutManager 中有 textContainerprivate lazy var layoutManager = NSLayoutManager()/ 专门用于指定绘制的区域private lazy var textContainer = NSTextContainer()override init(frame: CGRect) super.init(frame: f
16、rame)setupSystem()required init?(coder aDecoder: NSCoder) super.init(coder: aDecoder)setupSystem()private func setupSystem()/ 1.将layoutManager添加到textStoragetextStorage.addLayoutManager(layoutManager)/ 2.将textContainer添加到layoutManagerlayoutManager.addTextContainer(textContainer)override func layoutSu
17、bviews() super.layoutSubviews()/ 3.指定区域textContainer.size = bounds.size2、重写label的text属性?12345678910111213override var text: String?didSet/ 1.修改textStorage存储的内容textStorage.setAttributedString(NSAttributedString(string: text!)/ 2.设置textStorage的属性textStorage.addAttribute(NSFontAttributeName, value: UIF
18、ont.systemFontOfSize(20), range: NSMakeRange(0, text!.characters.count)/ 3.处理URLself.URLRegex()/ 2.通知layoutManager重新布局setNeedsDisplay()3、匹配字符串?1234567891011121314151617181920func URLRegex()/ 1.创建一个正则表达式对象dolet dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingType.Link.rawVa
19、lue)let res = dataDetector.matchesInString(textStorage.string, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, textStorage.string .characters.count)/ 4取出结果for checkingRes in reslet str = (textStorage.string as NSString).substringWithRange(checkingRes.range)let tempStr = NSMutableAttri
20、butedString(string: str)/ tempStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, str.characters.count)tempStr.addAttributes(NSFontAttributeName: UIFont.systemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor(), range: NSMakeRange(0, str.characters.count)textStorage.replaceCharactersInRange(checkingRes.range, withAttributedString: tempStr)catchprint(error)4、重绘文字?12345678910/ 如果是UILabel调用setNeedsDisplay方法, 系统会促发drawTextInRectoverride func drawTextInRect(rect: CGRect) / 重绘/ 字形 : 理解为一个小的UIView/*第一个参数: 指定绘制的范围第二个参数: 指定从什么位置开始绘制*/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考生物复习第二单元植物的激素调节必修全国公开课一等奖百校联赛示范课赛课特等奖课件
- 高考数学复习第三章导数及其应用3.2.1导数与函数的单调性文市赛课公开课一等奖省名师获奖
- 七年级美术上册第3课大家动手做条龙备课省公开课一等奖新名师获奖课件
- 张亦春-《金融市场学》04-外汇市场省公开课金奖全国赛课一等奖微课获奖课件
- 高中生物第一章生物科学和我们1.2生物科学的学习过程必修省公开课一等奖新名师获奖课件
- 七年级音乐上册第六单元七彩管弦图画展览会选段省公开课一等奖新名师获奖课件
- 高考语文复习专题六选用仿用变换句式含修辞突破一掌握常见的9种修辞手法市赛课公开课一等奖省名师获
- 转让房屋买卖合同书样本
- 新核心综合学术英语教程第二册Unit5省公开课金奖全国赛课一等奖微课获奖课件
- 保护黄河倡议书【15篇】
- Echelon微导管
- 在职工作证明中英文版
- 桥式起重机设计
- 软件工程论文图书馆管理系统分析报告
- 人教版初中数学第20章《数据的分析》教材分析
- 考研记忆法艾宾浩斯遗忘曲线复习计划表
- 实验室施工组织设计(完整版)
- 瓜菜常见病虫害
- 酒石酸锑钾MSDS[共4页]
- 商业招商工作流程
- 03J111-1轻钢龙骨内隔墙
评论
0/150
提交评论