博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RegexKitLite 正则表达式
阅读量:6710 次
发布时间:2019-06-25

本文共 3187 字,大约阅读时间需要 10 分钟。

http://blog.csdn.net/zzfsuiye/article/details/6631466(转--讲得不错)  

最 近做一个项目遇到从NSString中获取当中的IP地址使用 RegexKitLite第三库遇到的问题. 首先下载 RegexKitLite 导入 RegexKitLite.h 和RegexKitLite.m文件到项目中,然后导入系统自带的 libicucore.dylib.

  
   这里就讲解RegexKitLite中的两个方法:
    
1.-(NSString *)stringByMatching:(NSString *)regex;
这个方法是传一个正则表达式进去,返回匹配的NSString回来
2.- (NSString *)stringByMatching:(NSString *)regex capture:(NSInteger)capture;
这个方法和前面的那个多了一个caputre的参数,这个参数带的是一个int值。使用这个方法返回的是ip地址的某一段数据
看代码:
NSString *string = @"Connection: closeX-Powered-By: PHP/5.2.17Expires:224.4.226.12 Mon, 26 Jul 1997 05:00:00 GMTCache-Control: nocacPragma: no-cacheLocation:";
//下面这两个正则表格式都可以查询出IP
NSString *regex = @"(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])";
NSString * regex = @"((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|[1-9])";
    NSString *port = [string stringByMatching:regex];
    NSLog(@"port = %@",port);
这里调用第一中方法打印的是:224.4.226.12 可以正确的查找出来
    如果调用第二种方法   NSString *port = [string stringByMatching:regex capture:1];
打印出来的是:224.  显示的是第一段的数字.如果是2的话,打印是4. 如果超出了总长度程序会崩溃
第一次写,希望对正在寻找这个东西的朋友有帮助.
 
验证邮箱正确性:
1.赢文用户注册功能模块中需要检查邮箱合法性,这里分享一下两种实现方法。
方法一)RegexKitLite
1)下载地址:
2)解压后,将NSString-HexConversion.h/NSString-HexConversion.m添加到工程中
3)工程中添加libicucore.dylib frameworks。
4)用法:
NSString *sEmail = @””;
[sEmail isMatchedByRegex:@"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b”];
返回YES,表示合法
5)常用的一些正则表达式:具体参考官方文档
2.方法二)字符串操作
+(BOOL)validateEmail:(NSString*)email
{
if((0 != [email rangeOfString:@"@"].length) &&
(0 != [email rangeOfString:@"."].length))
{
NSCharacterSet* tmpInvalidCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSMutableCharacterSet* tmpInvalidMutableCharSet = [[tmpInvalidCharSet mutableCopy] autorelease];
[tmpInvalidMutableCharSet removeCharactersInString:@"_-"];
//使用compare option 来设定比较规则,如
//NSCaseInsensitiveSearch是不区分大小写
//NSLiteralSearch 进行完全比较,区分大小写
//NSNumericSearch 只比较定符串的个数,而不比较字符串的字面值
NSRange range1 = [email rangeOfString:@"@"
options:NSCaseInsensitiveSearch];
//取得用户名部分
NSString* userNameString = [email substringToIndex:range1.location];
NSArray* userNameArray   = [userNameString componentsSeparatedByString:@"."];
for(NSString* string in userNameArray)
{
NSRange rangeOfInavlidChars = [string rangeOfCharacterFromSet: tmpInvalidMutableCharSet];
if(rangeOfInavlidChars.length != 0 || [string isEqualToString:@""])
return NO;
}
NSString *domainString = [email substringFromIndex:range1.location+1];
NSArray *domainArray   = [domainString componentsSeparatedByString:@"."];
for(NSString *string in domainArray)
{
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:tmpInvalidMutableCharSet];
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
return YES;
}
else // no ”@” or ”.” present
return NO;
}
表5.懒惰限定符
代码/语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
 
代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou]

匹配除了aeiou这几个字母以外的任意字符

转载于:https://www.cnblogs.com/alihaiseyao/p/3351254.html

你可能感兴趣的文章
nginx学习总结二(nginx的启动停止以及版本平滑升级)
查看>>
linux网卡绑定
查看>>
fastjson报java.lang.ClassNotFoundError
查看>>
Microsoft Dynamics CRM server 2013 系统和SQL server 备份 为升级 CRM 2015版本准备
查看>>
超级变变变:喵星人汪星人还有街景神奇变身 | Paper+Code
查看>>
Exchange2016 高可用性配置及介绍
查看>>
RHEl 5服务篇—部署Postfix邮件服务(二)配置邮件服务器的收、发信服务
查看>>
DIY Func same as strncpy()
查看>>
推荐阅读的技术书籍。
查看>>
[CI框架02]视图View使用
查看>>
我的Linux系统的一些截图 之四
查看>>
centos 5.1遇到的问题总结
查看>>
DC学院数据分析学习笔记(一):获取数据
查看>>
Angular.js Services
查看>>
Javascript总结 - 1
查看>>
java连接数据库(access)
查看>>
[图示]做人36字诀:五)解困渡厄字诀——教你轻松快乐
查看>>
Linux负载均衡软件LVS之一(概念篇)
查看>>
《统一沟通-微软-实战》-6-部署-1-前端服务器-3-拓扑设计
查看>>
WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
查看>>