(一一〇)正则表达式的基本使用与RegexKitLite的使用

正则表达式常常用于匹配关键字,下面先介绍基本语法。

【基本语法】

①中括号表示满足其中之一即可,例如[abc],则这个位置可以是a、b、c中任意一个。

②在中括号中,可以通过-连接范围,例如a-z;多个范围之间并列不需要任何分隔符,例如[a-zA-Z]

③表示重复次数用{x},例如[a-z]{2}表示连续2次;表示重复次数的范围可用{x,y}。

④\\d表示数字。

⑤正则表达式默认的是贪婪匹配,例如[a-z]{2,4},如果出现类似abcde2ab这样的字符串,abcd满足最大长度4,因此会作为一个字符串、e是第二个、ab是第三个。

⑥通配符为.(点),.表示除换行符意外的任意字符。

⑦?表示0个或一个前面的字符、+代表至少一个、*代表0个或多个。

例如zo*,*代表o可以是0个或者多个o,也就是说可以是z、zoo。

⑧以什么开头用^,以什么结尾用$。

⑨OC字符串中的特殊字符用\转义。

例如[ ]是正则中的特殊表达式,\[是普通的‘[‘字符,而OC中\有特殊含义,需要对\再转义,因此用\\[表示‘[‘。

⑩表示中文的范围为 \\u4e00-\\u9fa5。

?多个匹配条件的并列用|。

匹配时一定要注意贪婪匹配的问题,否则可能会出错。

下面介绍OC自带的正则表达式对象。

【NSRegularExpression的使用】

首先创建对象,然后通过匹配模式得到NSTextCheckingResult数组,从中取出对象可以拿到匹配到的字符的范围。

下面的代码演示了从一个字符串中找出main和if的范围。

 NSString *code = @"mainjiaoififsiifnelsetifajomainiskkl";
 NSString *pattern1 = @"main|if";
 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern1 options:0 error:nil];
 NSArray *results = [regex matchesInString:code options:0 range:NSMakeRange(0, code.length)];
 for (NSTextCheckingResult *result in results) {
     NSLog(@"%@",NSStringFromRange(result.range));
 }

利用系统的对象进行匹配比较麻烦,下面介绍一个强大的第三方库RegexKitLite。

【集成RegexKitLite】

①首先从github下载RegexKitLite

②将文件RegexKitLite.m和.h导入到工程。

③由于该库比较老,不支持ARC,因此应该为RegexKitLite.m添加编译标记-fno-objc-arc进行局部ARC禁止。

④添加动态库libicucore.dylib。

注意③和④都在Build Phases中进行设置,如下图所示:

通过以上几步就完成了集成,下面介绍该库的常用方法。

该库是NSString的分类,因此字符串可以直接调用方法,常用的方法有匹配和分割。

①匹配:传入匹配模式pattern即可,可以获取匹配到的字符串和范围。

[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

     NSRange range = *capturedRanges;
     NSLog(@"%@ %@",*capturedStrings,NSStringFromRange(range));

}];

②分割:有时候有一种需求,需要获取到所有匹配到的内容之外的字串,也就是利用正则内容分割字符串,可以得到匹配到的字串以外的字符串和范围。

[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

     NSRange range = *capturedRanges;
     NSLog(@"%@ %@",*capturedStrings,NSStringFromRange(range));

}];

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 03:50:55

(一一〇)正则表达式的基本使用与RegexKitLite的使用的相关文章

(一一一)图文混排基础 -利用正则分割和拼接属性字符串

很多时候需要用到图文混排,例如聊天气泡中的表情,空间.微博中的表情,例如下图: 红心和文字在一起. 比较复杂的情况是表情夹杂在文字之间. 要实现这种功能,首先要介绍iOS中用于显示属性文字的类. 用于文字显示的类除了text属性之外,还有attributedText属性,这个属性是NSAttributedString类型,通过这个属性可以实现不同文字的不同字体.颜色甚至把图片作为文字显示的功能. 下面介绍这个字符串的使用. 以一条微博内容为应用场景,介绍如何从中找出表情.话题等内容,其中表情替换

正则表达式(开源框架)

正则表达式的开源实现:RegexKitLite(非ARC)使用这个类,需要导入依赖库:libicucore.dylib NSString *text = @"张三:010-88669900,李四232电话010-55443322发送0731-8373834垃圾费"; //1.定义正则表达式 NSString *regex = @"\\d{3,4}-\\d{7,8}"; //2.创建正则表达式实现对象 NSRegularExpression *expression =

需要知道的开源的框架-IOS

1:SDWebImage,UIImageView+WebCache加载一张图片. 2:UIViewExt用于定位坐标很有用,可以直接拿到bottom,top,left,right. 转:http://blog.csdn.net/complex_ok/article/details/7163736 MBProgressHUD —— 进度指示 一种优雅的,半透明的进度显示效果.同时还提供了其他附加功能,比如显示完成信息并淡出. iCarousel —— 效果很酷的分页排列 内容类似的页面需要并排列出

iOS开源项目汇总

扫描wifi信息: http://code.google.com/p/uwecaugmentedrealityproject/ http://code.google.com/p/iphone-wireless/ 条形码扫描: http://zbar.sourceforge.net/iphone/sdkdoc/install.html tcp/ip的通讯协议: http://code.google.com/p/cocoaasyncsocket/ voip/sip: http://code.goog

iOS 常用的几个第三方库

网络通信 1.ASIHTTPRequest 这是一个经典的老库,功能完全而强大,但已经停止更新很久了(iOS5.0停止更新,但是我最近看github上这个项目有新改动).在不同iOS版本上略微有一些小问题(提醒显示上的),所以用的时候还是稍微修改一下比较好. 下载地址:https://github.com/pokeb/asi-http-request 2.AFNetworking 轻量级的通讯类库,使用非常简单. 下载地址:https://github.com/AFNetworking/AFNe

iOS常用第三方类库

转载自:http://www.cocoachina.com/applenews/devnews/2013/0106/5478.html "开发几个常用的开源类库及下载地址:1.json json编码解码:2.GTMBase64 base64编码解码:3.TouchXML xml解析....." 来自社区会员li_zhi0123的分享: 会员博客: http://blog.csdn.net/wstarx/article/details/6317779 http://iosdevelope

Iphone开源项目汇总

扫描wifi信息: http://code.google.com/p/uwecaugmentedrealityproject/ http://code.google.com/p/iphone-wireless/ 条形码扫描: http://zbar.sourceforge.net/iphone/sdkdoc/install.html tcp/ip的通讯协议: http://code.google.com/p/cocoaasyncsocket/ voip/sip: http://code.goog

转:常用的几个提高iOS开发效率的开源类库及工具

常用的几个提高iOS开发效率的开源类库及工具 iOS开发者 : 开发几个常用的开源类库及下载地址: 算上这个连接:http://wenku.baidu.com/view/bbeb0091dd88d0d233d46a00.html 1.json json编码解码2.GTMBase64 base64编码解码3.TouchXML xml解析4.SFHFKeychainUtils 安全保存用户密码到keychain中 5.MBProgressHUD 很棒的一个加载等待特效框架6.ASIHTTPReque

GitHub 里面有大量优秀的第三方框架

写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每个项目都想集成的几个框架. SDWebImageView 1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 Model 类来存放这些数据.这就要求我们