IOS正则表达式

http://blog.csdn.net/andyddd/article/details/7542241

os从4.0开始支持正则表达式。具体涉及到的类是:

NSRegularExpression

NSTextCheckingResult

有了这个内置的ios正则表达式函数,可以不用RegexKitLite了。现在比较强的正则库是PCRE的,mac上PCRE的实现见:

http://regexkit.sourceforge.net/

两个例子说明一下NSRegularExpression的用法:

[cpp]  view plain copy
  1. -(void)parseString{  
  2.     //组装一个字符串,需要把里面的网址解析出来  
  3.     NSString *urlString=@"sfdsfhttp://www.baidu.com";  
  4.       
  5.     //NSRegularExpression类里面调用表达的方法需要传递一个NSError的参数。下面定义一个  
  6.       
  7.     NSError *error;  
  8.       
  9.     //http+:[^\\s]* 这个表达式是检测一个网址的。  
  10.     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http+:[^\\s]*" options:0 error:&error];  
  11.       
  12.    if (regex != nil) {  
  13.        NSTextCheckingResult *firstMatch=[regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])];  
  14.         
  15.        if (firstMatch) {  
  16.            NSRange resultRange = [firstMatch rangeAtIndex:0];  
  17.              
  18.            //从urlString当中截取数据  
  19.            NSString *result=[urlString substringWithRange:resultRange];  
  20.            //输出结果  
  21.            NSLog(@"%@",result);  
  22.    }  
  23.         
  24.    }  
  25. }  

NSRegularExpression功能还是比较强大的,支持正则嵌套分组,下面是例子:

[cpp]  view plain copy
  1. NSString * tmp = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dreamcafe.rtf" ofType:nil]   
  2.                                            encoding:NSUTF8StringEncoding   
  3.                                                   error:nil];  
  4.       
  5.       
  6. //    NSRange r;  
  7.     NSString *regExStr = @"hbhWxTime[\"\']><.*?>(.+?)<";  
  8.     NSError *error = NULL;  
  9.       
  10.     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regExStr  
  11.                                                                            options:NSRegularExpressionCaseInsensitive  
  12.                                                                              error:&error];  
  13.       
  14.   
  15.     __block NSMutableArray  * timeTimes = [NSMutableArray array];  
  16.     [regex enumerateMatchesInString:tmp options:0 range:NSMakeRange(0, [tmp length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {  
  17.         NSLog(@"timeTimes = %@",[tmp substringWithRange:[result rangeAtIndex:1]]);  
  18.   
  19.         [timeTimes addObject:[tmp substringWithRange:[result rangeAtIndex:1]]];  
  20.     }];  
  21.   
  22.    
  23.   
  24.  /*注释: 
  25.  
  26. [result rangeAtIndex:0] yuresult.range 等价 
  27.  
  28. */  
  29.   
  30. 说明:  
  31.   
  32. 匹配结果:  
  33.   
  34. NSTextCheckingResult  
  35.   
  36. !!!用range来标示匹配到的每一个子表达式/分组的。既通过substringWithRange:才能获取到某个子表达式匹配到的字符串  
  37.   
  38.  range    
  39.   resultType    
  40.   numberOfRanges  匹配到的分组/子表达式个数  
  41. – rangeAtIndex:       获取第几个子表达式    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值