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.赢文用户注册功能模块中需要检查邮箱合法性,这里分享一下两种实现方法。方法一)RegexKitLite1)下载地址: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 ”.” presentreturn NO;}
代码/语法 | 说明 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |