使用开源库 Objective-C RegEx Categories 处理正则表达式

Objective-C RegEx Categories
https://github.com/bendytree/Objective-C-RegEx-Categories
使用说明:将 RegExCategories.h RegExCategories.m 文件拖入工程中引入头文件即可.
==========================================================================
//匹配电话号码(手机号以13, 15,18开头,八个 \d 数字字符)
BOOL isMatch = [@"15910514636" isMatch:RX(@"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$")];
NSLog(@"%d", isMatch);
//匹配邮箱
BOOL isMatch = [@"705786230@qq.com" isMatch:RX(@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}")];
NSLog(@"%d", isMatch);
//匹配用户名(用户名长度为6-20位之间,大小写字母或者数字均可)
BOOL isMatch = [@"705786230" isMatch:RX(@"^[A-Za-z0-9]{6,20}+$")];
NSLog(@"%d", isMatch);
//匹配身份证号
BOOL isMatch = [@"42120919831025587X" isMatch:RX(@"^(\\d{14}|\\d{17})(\\d|[xX])$")];
NSLog(@"%d", isMatch);
==========================================================================
//创建一个正则表达式
Rx* rx = RX(@"\\d");
Rx* rx = [Rx rx:@"\\d"];
Rx* rx = [Rx rx:@"\\d" ignoreCase:YES];
//判断字符串是否匹配
BOOL isMatch = [@"2345" isMatch:RX(@"^\\d+$")];
//获取匹配的字符串
NSString* age = [@"My dog is 3." firstMatch:RX(@"\\d+")];
//获取匹配的结果存储进数组
NSArray* words = [@"Hey pal" match:RX(@"\\w+")];
// words => @[ @"Hey", @"pal" ]
//能获取详细信息的匹配
RxMatch* match = [@"12.34, 56.78" firstMatchWithDetails:RX(@"\\d+([.]\\d+)")];
// match.value => @"12.34"
// match.range => NSRangeMake(0, 5);
// match.original => @"12.34, 56.78";
// match.groups => @[ RxMatchGroup, RxMatchGroup ];
//使用模板来替换匹配的字符串
NSString* result = [@"My dog is 12." replace:RX(@"\\d+") with:@"old"];
// result => @"My dog is old."
//使用block来替换
NSString* result = [RX(@"\\w+") replace:@"hi bud" withBlock:^(NSString* match){
return [NSString stringWithFormat:@"%i", match.length];
}];
// result => @"2 3"
//获取详细匹配信息的block方式
NSString* result = [RX(@"\\w+") replace:@"hi bud" withDetailsBlock:^(RxMatch* match){
return [NSString stringWithFormat:@"%i", match.value.length];
}];
// result => @"2 3"
==========================================================================
总结:正则表达式可用来按照一定模式来实现匹配字符串,替换字符串等等强大的功能,详细使用说明请参考该开源框架的使用示例.
其他:使用谓词来处理正则表达式示例
==========================================================================
NSString *email = @"YouXianMing@163.com";
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [predicate evaluateWithObject:email];
==========================================================================
使用开源库 Objective-C RegEx Categories 处理正则表达式的更多相关文章
- 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习
首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?action-viewnews-itemid-61998. C++开源库,欢迎补充. C++在“商业应用” ...
- [转贴]C++开源库
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一 桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C# ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- 【Java&Android开源库代码剖析】のandroid-smart-image-view
Android应用开发已经进入到相对成熟的阶段,特别在国外,涌现出了各式各样的成熟稳定的开源库,供普通开发者使用.这种情况虽然极大加速了app开发的进程,但同时带来的问题是大多数普通开发者在使用这些开 ...
- 十大ios开发者喜爱的开源库
十大ios开发者喜爱的开源库 (转自博客园) 2014-08-17 14:07:58| 分类: objective-c | 标签:ios 开源库 |举报|字号 订阅 下载LOFTER我的照片书 ...
- C++开源库,欢迎补充。
转载自:http://blog.csdn.net/kobejayandy/article/details/8681741 C++在"商业应用"方面,曾经是天下第一的开发语言,但这一 ...
- ios很好的开源库
Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.. 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD ...
- C++开源库,欢迎补充
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C#语 ...
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
随机推荐
- supervisor安装部署和使用实例
Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由superviso ...
- scanf 输入加逗号(或者不加逗号)出现的异常及解决方案
我们在写 C 语言代码通常 scanf 的格式控制部分都有两种习惯,加逗号与不加逗号,而这两种情况都会因为我们的不同输入习惯产生一定的问题,这里给出另一种方法. 1.不加逗号 #include< ...
- hdu 5428 质因子
问题描述有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大.幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个 ...
- 将prometheus采集的数据远程存储到influxdb中
这个比较简单, https://docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus 只需要更改prometheus.yam ...
- 【LOJ】#2511. 「BJOI2018」双人猜数游戏
题解 设\(f[p][a][b]\)表示询问了\(p\)次,答案是\(a,b\)是否会被猜出来 然后判断如果\(p = 1\) 第一个问的\(Alice\),那么\([s,\sqrt{nm}]\)约数 ...
- 【AtCoder】ARC098题解
C - Attention 枚举,计算前缀和即可 代码 #include <bits/stdc++.h> #define fi first #define se second #defin ...
- hadoop2.6.4集群的搭建
hadoop集群搭建(亲自操作成功步骤!值得信赖!) 1.1集群简介 hadoop的核心组件: HDFS(分布式文件系统) YARN(运算资源调度系统) MapReduce(分布式运算编程框架) HA ...
- 家庭房产L2-007
较为麻烦的并查集 主要是我的模板是错的检查了好久.... 先是输入 把每个家庭连在一起 输出的家庭编号为该家庭所有编号的最小值 在并查集里面完成 第一次 0~n-1遍历储存好 家庭编号 和房子面积和 ...
- centos 6.x x86 源码安装git-2.3.0
(1) 添加rpmforge源 wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686 ...
- sublime text3中文乱码问题解决方案
1. 首先需要安装包convertToUTF8,安装完重启后如果仍然不能正常显示中文,则需要进行用户配置. 2.用户配置:preferences>settings 在用户设置加入一个属性:&qu ...