无为清净楼资源网 Design By www.qnjia.com
作为一门先进的编程语言,Swift 可以说吸收了众多其他先进语言的优点,但是有一点却是让人略微失望的,就是 Swift 至今为止并没有在语言层面上支持正则表达式。
正则表达式的用处:
判断给定的字符串是否符合某一种规则(专门用于操作字符串)
- 电话号码,电子邮箱,URL...
- 可以直接百度别人写好的正则
- 别人真的写好了,而且测试过了,我们可以直接用
- 要写出没有漏洞正则判断,需要大量的测试,通常最终结果非常负责
过滤筛选字符串,网络爬虫
替换文字,QQ聊天,图文混排
语法规则
使用过程
1、创建规则
2、创建正则表达式对象
3、开始匹配
代码示例
private func check(str: String) { // 使用正则表达式一定要加try语句 do { // - 1、创建规则 let pattern = "[1-9][0-9]{4,14}" // - 2、创建正则表达式对象 let regex = try NSRegularExpression(pattern: pattern, options: 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) } }
其他几个常用方法
// 匹配字符串中所有的符合规则的字符串, 返回匹配到的NSTextCheckingResult数组 public func matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> [NSTextCheckingResult] // 按照规则匹配字符串, 返回匹配到的个数 public func numberOfMatchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> Int // 按照规则匹配字符串, 返回第一个匹配到的字符串的NSTextCheckingResult public func firstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult"htmlcode">public class NSDataDetector : NSRegularExpression { // all instance variables are private /* NSDataDetector is a specialized subclass of NSRegularExpression. Instead of finding matches to regular expression patterns, it 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 NSTextCheckingResult instances returned will be of the appropriate types from that list. */ public init(types checkingTypes: NSTextCheckingTypes) throws public var checkingTypes: NSTextCheckingTypes { get } } // 这个是类型选择 public static var Date: NSTextCheckingType { get } // date/time detection public static var Address: NSTextCheckingType { get } // address detection public static var Link: NSTextCheckingType { get } // link detectionNSDataDetector 获取URL示例
/** 匹配字符串中的URLS - parameter str: 要匹配的字符串 */ private func getUrl(str:String) { // 创建一个正则表达式对象 do { let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(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) } }".*" 可以满足一些基本的匹配要求
如果想同时匹配多个规则 ,可以通过 "|" 将多个规则连接起来
将字符串中文字替换为表情
/** 显示字符中的表情 - parameter str: 匹配字符串 */ private func getEmoji(str:String) { let strM = NSMutableAttributedString(string: str) do { let pattern = "\\[.*" let regex = try NSRegularExpression(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[--count] let tempStr = (str as NSString).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) // 替换字符串,显示到label emoticonLabel.attributedText = strM } catch { print(error) } }TextKit 给URL高亮显示
主要用到三个类
NSTextStorage
NSLayoutManager
NSTextContainer自定义UILabel来实现url高亮
1、定义要用到的属性
/* 只要textStorage中的内容发生变化, 就可以通知layoutManager重新布局 layoutManager重新布局需要知道绘制到什么地方, 所以layoutManager就会文textContainer绘制的区域 */ // 准们用于存储内容的 // textStorage 中有 layoutManager private lazy var textStorage = NSTextStorage() // 专门用于管理布局 // layoutManager 中有 textContainer private lazy var layoutManager = NSLayoutManager() // 专门用于指定绘制的区域 private lazy var textContainer = NSTextContainer() override init(frame: CGRect) { super.init(frame: frame) setupSystem() } required init"htmlcode">override var text: String"htmlcode">func URLRegex() { // 1.创建一个正则表达式对象 do{ let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingType.Link.rawValue)) let res = dataDetector.matchesInString(textStorage.string, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, textStorage.string.characters.count)) // 4取出结果 for checkingRes in res { let str = (textStorage.string as NSString).substringWithRange(checkingRes.range) let tempStr = NSMutableAttributedString(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) } }catch { print(error) } }4、重绘文字
// 如果是UILabel调用setNeedsDisplay方法, 系统会促发drawTextInRect override func drawTextInRect(rect: CGRect) { // 重绘 // 字形 : 理解为一个小的UIView /* 第一个参数: 指定绘制的范围 第二个参数: 指定从什么位置开始绘制 */ layoutManager.drawGlyphsForGlyphRange(NSMakeRange(0, text!.characters.count), atPoint: CGPointZero) }获取label中URL的点击
如果要获取URL的点击,那么必须获取点击的范围
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent"点击了URL") } } }以上内容就是小编跟大家介绍的swift中的正则表达式小结,希望大家喜欢。
标签:swift正则表达式,正则表达式
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]
- P1X3L《P1X3L》[320K/MP3][143MB]
- 群星.2022-良辰好景知几何电视剧原声带【SONY】【FLAC分轨】
- 庾澄庆.1991-管不住自己【福茂】【WAV+CUE】