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)下载地址:http://regexkit.sourceforge.net/RegexKitLite/index.html
2)解压后,将NSString-HexConversion.h/NSString-HexConversion.m添加到工程中
3)工程中添加libicucore.dylib frameworks。
4)用法:
NSString *sEmail = @”he.wenhao@163.com”;
[sEmail isMatchedByRegex:@"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b”];
返回YES,表示合法
5)常用的一些正则表达式:具体参考官方文档http://regexkit.sourceforge.net/RegexKitLite/index.html
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这几个字母以外的任意字符

RegexKitLite 正则表达式的更多相关文章

  1. [IOS]开源库RegexKitLite正则表达式的使用

    1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中. 2.工程中添加libicucore.dylib frameworks. 友情提醒:一般 ...

  2. iOS RegexKitLite 提取匹配的内容

            使用RegexKitLite正则表达式需要以下工作: 1.RegexKitLite官方网址(内含使用教程):http://regexkit.sourceforge.net/RegexK ...

  3. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  4. iOS-常用的第三方框架的介绍

    写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...

  5. IOS一些高效的第三方框架库

    MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgres ...

  6. 史上最全的常用iOS的第三方框架

    文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片 ...

  7. 常用iOS的第三方框架

    图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...

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

    写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...

  9. iOS开源 框架

    UI界面类项目: Panoramagl ——720全景展示 Panorama viewer library foriPhone, iPad and iPod touch MBProgressHUD — ...

随机推荐

  1. 淘宝三角做法防CSS2D转换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 算法——js(Fibonacci数列)

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为“兔子数列”,指 ...

  3. 在Oracle中使用rank()over()排名的问题

    排序: ---rank()over(order by 列名 排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4 select scoreid, st ...

  4. linux copy

    cp -ri 131115-6/* /web/www/attachment/  把13这个文件夹下面所有的文件和文件夹复制到 /web/www/attachment cp -a  a  /web/ww ...

  5. qml操作播放器

    现在增加了一个filter属性,所以可以很好和opencv结合.转一篇文章(http://blog.qt.io/blog/2015/03/20/introducing-video-filters-in ...

  6. 在ASP.NET MVC中使用Area

    前言: 这段时间小猪花了不少功夫在研究ASP.NET MVC的源码上面,可谓思想是了解了不少,用的上用不上却是另外一回事了.! 应用场景: ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规 ...

  7. 基于TCP协议的网络通信

    TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信.Java对基于TC ...

  8. 使用AlarmManager定时更换壁纸----之一

    import android.os.Bundle;import android.app.Activity;import android.app.AlarmManager;import android. ...

  9. 周游加拿大(dp好题)

    你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市.每个城市只能访问 ...

  10. exe转msi

    1.起因 由于域推送只支持msi安装包,而很多常用的工具比如Adobe Flash Player.exe.SilverLight.exe都是exe格式的,于是引出要将exe转成silent msi的工 ...