zoukankan      html  css  js  c++  java
  • RegexKitLite 正则表达式

    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这几个字母以外的任意字符

  • 相关阅读:
    About Dump File
    设置IIS延长Debug
    正则表达式中\d和[00]有什么区别
    理解程序语言语法的merge工具——semanticmerge
    大数据还是小数据
    如何在TFS中配置别的diff/merge的工具
    一个很cool的展示编程语言相互影响关系的网状图
    常见的算法的时间和空间复杂度
    C#的强迫执行域Constrained Execution Regions(CERs)
    C++的C4305和C4800的编译警告
  • 原文地址:https://www.cnblogs.com/alihaiseyao/p/3351254.html
Copyright © 2011-2022 走看看