swift中的正则表达式小结

来源:脚本之家  责任编辑:小易  

如图所示:例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Un

作为一门先进的编程语言,Swift 可以说吸收了众多其他先进语言的优点,但是有一点却是让人略微失望的,就是 Swift 至今为止并没有在语言层面上支持正则表达式。

首先去掉首末位空格。var str = input.replace(/(^&am

正则表达式的用处:

  如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。

判断给定的字符串是否符合某一种规则(专门用于操作字符串)

命名分组捕获 - (?<name>)或(?'name') 就是在分组捕获

- 电话号码,电子邮箱,URL...

正则是,一种字符串处理表达式,可进行文本的查找,替换,判断某个文本是否存在,子文本串的提取等操作,正

- 可以直接百度别人写好的正则

里皮在当今足坛名帅里具体排名第几这个不好评价,但是可以肯定一点的是,意大利“银狐”绝对是当今足坛最优秀的足球主教练之一!他的球员生涯其实并不出彩,可以用平淡无奇来形容。但自从1982年执教桑普多利亚青年队后,里皮便开启了他的传奇执教生涯,里皮在尤文图斯执教的8年中,率队夺得五个意甲联赛冠军、三座杯赛冠军奖杯、四次意大利超级杯冠军和一座欧冠冠军。2006年里皮又率意大利国家队夺得世界杯冠军。正如皇马主帅齐达内所说:如果没有里皮,我可能达不到一个球星的高度。我们心里都清楚,这些荣耀对于一个主教练意味着什么。我们可以看到里皮在中国的执教生涯是比较成功的。里皮带领中国队战胜了韩国队,昨晚又打败了乌兹别

- 别人真的写好了,而且测试过了,我们可以直接用

  宠物狗和人一样,也是需要刷牙的,确切的说宠物狗的牙齿远远比人类的牙齿重要。人的牙齿不行的话可以拔掉换新的,狗狗呢?难道也镶牙吗?所以说狗狗的牙齿决定了狗狗的健康。  给宠物狗狗养成刷牙的良好习惯,可以避免很多口腔问题。健康地牙齿应该是完整的,呈自然白色且没有牙垢。  养狗知识:宠物美容之狗狗也要刷牙检查宠物狗狗的牙龈和舌头是否为粉红色或者部分粉红色(牙龈和舌头本身有颜色的犬种除外,如松狮犬)。牙龈应该紧紧包围着每颗牙齿,上面不能有食物或者杂志附着。轻轻按压牙龈时应无疼痛感(牙龈炎),当宠物呼吸时不应有难闻的异味。  健康地牙齿应该是完整的,呈自然白色且没有牙垢。如果宠物配合,可以经常使用宠

- 要写出没有漏洞正则判断,需要大量的测试,通常最终结果非常负责

一,阅读书是世界上最便宜的东西。外面吃一顿饭的钱可以买好箱子书。而书是需要父母花时间去筛选的,可以根据孩子的兴趣个年龄,参考各种书单,原则合适的书。小娃先从绘本开始,用绘本和故事书喂养大的孩子,长大都不会差。很多学霸,高考状元都喜欢读课外书,视野开阔,胸襟也开阔,腹有诗书气自华。所以,从小给孩子读书吧!二,英语启蒙最省钱的方法汉语是世界上最优美的语言之一。除了一定学好中文,英文也要重视起来。外面的教育机构动辄上万,进度很慢,又学不到什么东西,真是浪费我们的血汗钱。一个最简单的方法是,自己在家启蒙。小宝宝开始就可以磨耳朵,从英文儿歌开始。买个播放器,就很方便。网上资源很丰富用点心就可以找到,找不

过滤筛选字符串,网络爬虫

不会。就iPad的形态而言就决定了它永远不可能取代笔记本,同理,笔记本也不能取代iPad。Pro相区别于普通iPad无他,就一支笔和一个键盘,键盘可以帮助用户更好地完成文字编辑工作,而笔的作用更多的是承载用户绘图需求。文字编辑方面,iPad赶不上笔记本,最多就是个辅助。而pro的核心卖点就是那根笔,配合ios和极佳的屏幕,用户能很好的完成绘图等工作,所以我觉得,pro的特定人群,就是专业的绘图师。手机答题不易,谢谢

替换文字,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? // 按照规则匹配字符串, 返回第一个匹配到的字符串的范围 public func rangeOfFirstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSRange

使用子类来匹配日期、地址、和URL

看官网文档解释,可以知道这个 NSDataDetector 主要用来匹配日期、地址、和URL。在使用时指定要匹配的类型

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 detection

NSDataDetector 获取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?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setupSystem() } private func setupSystem() { // 1.将layoutManager添加到textStorage textStorage.addLayoutManager(layoutManager) // 2.将textContainer添加到layoutManager layoutManager.addTextContainer(textContainer) } override func layoutSubviews() { super.layoutSubviews() // 3.指定区域 textContainer.size = bounds.size }

2、重写label的text属性

override var text: String? { didSet{ // 1.修改textStorage存储的内容 textStorage.setAttributedString(NSAttributedString(string: text!)) // 2.设置textStorage的属性 textStorage.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(20), range: NSMakeRange(0, text!.characters.count)) // 3.处理URL self.URLRegex() // 2.通知layoutManager重新布局 setNeedsDisplay() } }

3、匹配字符串

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?) { // 1、获取手指点击的位置 let touch = (touches as NSSet).anyObject()! let point = touch.locationInView(touch.view) print(point) // 2、获取URL区域 // 注意: 没有办法直接设置UITextRange的范围 let range = NSMakeRange(10, 20) // 只要设置selectedRange, 那么就相当于设置了selectedTextRange selectedRange = range // 给定指定的range, 返回range对应的字符串的rect // 返回数组的原因是因为文字可能换行 let array = selectionRectsForRange(selectedTextRange!) for selectionRect in array { if CGRectContainsPoint(selectionRect.rect, point) { print("点击了URL") } } }

以上内容就是小编跟大家介绍的swift中的正则表达式小结,希望大家喜欢。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

swift 中正则表达式没有办法给分组捕获命名么

很可惜,并没有

swift不支持命名的分组捕获,只支持由()括起来表示的匿名分组捕获

苹果官方Reference里的Regular Expression Operators一节,明确写出了支持的表达式算符,其中不包括<>

但包括以下:

(...)

Capturing parentheses. Range of input that matched the parenthesized subexpression is available after the match.

复制自知乎

www.zhihu.com/question/35831439/answer/66631211

swif正则表达式怎么写小数点的

很可惜,并没有 swift不支持命名的分组捕获,只支持由()括起来表示的匿名分组捕获 苹果官方Reference里的Regular Expression Operators一节,明确写出了支持的表达式算符

re正则表达式,这个代码什么意思?(初学者)

这个正则就是匹配数字;

-?表示前面可以有一个可选的减号;

\d+表示一到多个数字,(-?\d+)这个表示整数部分;

(\.\d+)?表示一个小数点跟多个数字,?表示前面这部分是可选的,这部分匹配一个可选的小数部分;

^(\d)$就是0-9的任意一个数字;

^表示以...开头,\d表示0-9的数字,$表示以...结尾;

所以这个就是表示单个数字了。

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

js正则表达式怎么匹配英文和空格 输入的是英文名字:如 Taylor Swift ;

首先去掉首末位空格。

var str = input.replace(/(^\s*)|(\s*$)/g,"");

验证名字

字符头尾是字母,中间由空格和字母组成,中间可以有多个空格,如:Taylor Gre Swift

/^[A-Za-z][A-Za-z\s]*[A-Za-z]$/.test(str);

如果想将中间无论多少空格替换成一个,可以再加这个:

str = str.replace(/\s+/g," ");

字符头尾是字母,中间由空格和字母组成,中间只有一个空格,如:Taylor Gre Swift

/^([A-Za-z]+\s?)*[A-Za-z]$/.test(str);

C语言怎么用正则表达式

借用c的正则表达式库,需要引入头文件<regex.h>。支持POSIX.2正则表达式标准。简单用法如:

regex_t reg; //先声明一个正则表达式体。

regcomp(®, "[a-zA-Z]*", 0); //从字符串来编译这个表达式。

regmatch_t match[2]; //用来保存匹配结果。

regexec(®, "abcedfg", 2, match, 0); //匹配字符串。

此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。

  • 本文相关:
  • swift的74个常用内置函数介绍
  • swift教程之字符串和字符详解
  • 升级到swift 4.0可能遇到的坑总结
  • swift中的指针操作和使用详细介绍
  • swift中的命名空间详解
  • java正则表达式过滤出字母、数字和中文
  • python正则表达式操作指南
  • 一串字字符中多个逗号替换为一个 既标准分隔符(正则表达式)
  • asp match正则函数使用matchs实例
  • javascript 正则表达式使用详细参数
  • 正则表达式学习参考 正则入门学习资料
  • 写出高效率的正则表达式技巧总结
  • 正则表达式与html5新元素
  • php 正则表达式特殊字符 [:alnum:] [:alpha:] 等
  • 深度分析正则(pcre)最大回溯/递归限制
  • swift 中正则表达式没有办法给分组捕获命名么
  • swif正则表达式怎么写小数点的
  • re正则表达式,这个代码什么意思?(初学者)
  • js正则表达式怎么匹配英文和空格 输入的是英文名字:如 Taylor Swift ;
  • C语言怎么用正则表达式
  • 人民币大小写正则表达式怎么写:^[壹贰叁肆伍陆柒捌玖拾佰仟万亿〇一二三四五六七八九十百千万元圆角分零...
  • js正则表达式怎么匹配英文和空格?
  • 正则表达式支持库 怎么用
  • swift 中正则表达式没有办法给分组捕获命名么
  • Java中的正则是什么意思?求解
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved