(一一〇)正则表达式的基本使用与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));
}];
(一一〇)正则表达式的基本使用与RegexKitLite的使用的更多相关文章
- (一一〇)正則表達式的基本使用与RegexKitLite的使用
正則表達式经常常使用于匹配keyword,以下先介绍基本的语法. [基本的语法] ①中括号表示满足当中之中的一个就可以,比如[abc],则这个位置能够是a.b.c中随意一个. ②在中括号里,能够通过- ...
- iOS-常用的第三方框架的介绍
写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...
- IOS一些高效的第三方框架库
MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgres ...
- iphone 开源汇总(转)
原文地址 http://blog.csdn.net/devday/article/details/6105793 扫描wifi信息: http://code.google.com/p/uwecaugm ...
- iOS开源项目汇总
扫描wifi信息: http://code.google.com/p/uwecaugmentedrealityproject/ http://code.google.com/p/iphone-wire ...
- GitHub 里面有大量优秀的第三方框架
写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...
- ios开源项目(各种有用的第三方库)
状态栏:MTStatusBarOverlay 下拉刷新:EGOTableViewPullRefresh 网络应用:ASIHTTPRequest 等待特效:MBProgressHUD JSON解 ...
- 需要知道的开源的框架-IOS
1:SDWebImage,UIImageView+WebCache加载一张图片. 2:UIViewExt用于定位坐标很有用,可以直接拿到bottom,top,left,right. 转:http:// ...
- iOS常用的开源类库
开发几个常用的开源类库及下载地址: 引用 1.json json编码解码 2.GTMBase64 base64编码解码 3.TouchXML xml解析 4.SFHFKeychainUtils 安全保 ...
随机推荐
- 三种方法,刷新 Android 的 MediaStore!让你保存的图片立即出现在相册里!
公众号原标题:测试:"系统相册里怎么看不到我刚保存的图片,是我操作不对吗?" 一.序 Hi,大家好,我是承香墨影! App 内,创建一个文件并保存文件到本地的需求,是很常见的 I/ ...
- Java反射异常:java.lang.NoSuchFieldException
版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. 今天用反射给对象赋值,有一个属性始终报错,主要错误信息如下: ...
- AsyncLocal 与 async await
大家来看一张图 先猜猜看为什么会这样 关于async await的原理 建议查看 https://blog.csdn.net/brook_shi/article/details/50803957 这篇 ...
- Unity使用C++作为游戏逻辑脚本的研究
文章申明:本文来自JacksonDunstan的博客系列文章内容摘取和翻译,版权归其所有,附上原文的链接,大家可以有空阅读原文:C++ Scripting( in Unity) 一.C#和C++的通信 ...
- webpack 4 + mockjs
一.创建项目目录 二.添加开发依赖( html-webpack-plugin.webpack.webpack-cli.webpack-dev-server.webpack-api-mocker) 如下 ...
- Django项目实战之用户头像上传与访问
1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> < ...
- PHP 5 Filesystem 函数
PHP Filesystem 简介 Filesystem 函数允许您访问和操作文件系统. 安装 Filesystem 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. Runtime 配置 ...
- render函数data参数中的model选项
官方文档没有说, 但是编译v-model时, 是有model这个选项的, 例如: _c('el-input', { attrs: { "placeholder": "手机 ...
- Bootstrap3 排版-对齐
通过文本对齐类,可以简单方便的将文字重新对齐. Left aligned text. Center aligned text. Right aligned text. Justified text. ...
- MyEclipse的Debug模式启动缓慢
打开breakpoints veiw,右键-> Remove all,重启下服务器就OK了 -–下面有个"顶"字,你懂得O(∩_∩)O哈哈~ -–乐于分享,共同进步! -–更 ...