iOS中NSRegularExpression正则表达式的使用

初始化一个   NSRegularExpression 对象 注:_str是要匹配的字符串

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?" options:NSRegularExpressionCaseInsensitive error:nil];


获得所有匹配了表达式的字符串。

    NSArray *array =    nil;

    array = [regex matchesInString:_str options:0 range:NSMakeRange(0, [_str length])];
    NSString *str1 = nil;
    for (NSTextCheckingResult* b in array)

    {

         str1 是每个和表达式匹配好的字符串。

        str1 = [_str substringWithRange:b.range];
        NSLog(@" str 1 is %@",str1);

    }


获得匹配的字符串的个数

NSUInteger numberOfMatches = [regex numberOfMatchesInString:_str options:0 range:NSMakeRange(0, [_str length])];


替换匹配的字符串  $0很重要 $0不行的话 $1依此类推 打印了看结果

    NSString *modifiedString = [regex stringByReplacingMatchesInString:_str
                                                               options:0
                                                                 range:NSMakeRange(0, [_str length])
                                                          withTemplate:@"<a href=\"$0\">$0</a>"];
    NSLog(@"######## the modified string is %@",modifiedString);




提供一个网页版的JavaScript 调试工具,非常给力:http://www.renrousousuo.com/tools/regex_debug.html
1: 如果在检索的文本中需要检索包含正则表达式的关键字,如 "[ ]" 那么在 拼装字符串时 需要加两个反斜杠(\\[)进行转义识别,否则会误判的
2: 在iOS中的正则表达式字符串  不需要左右侧加 / 

1:NSRegularExpression 案例一. 在HTML字符串中 找寻出完整的 <img> 标签.   包含  /> 和 </img> 结尾两种情况

[csharp] view plain copy
  1. NSError *error;  
  2. NSString *strRegex = @"<img([^<]+)(/>|</img>)";  
  3. NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:strRegex options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:&error];  
  4. //无视大小写.  
  5. NSArray *matches = [reg matchesInString:@"所要查找的字符串" options:NSMatchingCompleted range:NSMakeRange(0, [muStrHTMLContent length])];  
  6.   
  7. for (NSTextCheckingResult *match in matches) {  
  8.         i++;  
  9.         NSRange range = [match range];  
  10.         NSLog(@"%d,%d,%@",range.location,range.length,[muStrCloneHTMLContent substringWithRange:range]);  
  11. }  

2:NSRegularExpression 案例二. 对给定的字符串进行正则批量替换
[csharp] view plain copy
  1. NSError* error = NULL;  
  2. //(encoding=\")[^\"]+(\")   
  3. //分成三段来理解  
  4. /* 
  5.      第一段:以某段字符做为起始 (encoding=\") 括号内为实际内容 
  6.      第二段:对于包含中的定义,参见正则. 
  7.      第三段:再以某段字符做为收尾 (\") 
  8. */  
  9. NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(encoding=\")[^\"]+(\")"  
  10.                                                                            options:0  
  11.                                                                            error:&error];  
  12. NSString* sample = @"<xml encoding=\"abc\"></xml><xml encoding=\"def\"></xml><xml encoding=\"ttt\"></xml>";  
  13. NSLog(@"Start:%@",sample);  
  14. //对给定的字符串进行正则批量替换. $1 表示 是否保留起始  $2 表示 是否保留收尾  
  15. NSString* result = [regex stringByReplacingMatchesInString:sample  
  16.                                                        options:0  
  17.                                                        range:NSMakeRange(0, sample.length)  
  18.                                                        withTemplate:@"$1余书懿$2"];  
  19. NSLog(@"Result:%@", result);  

3:案例三: 补全 json 字符串中  没有 双引号的 key 

[csharp] view plain copy
  1. NSError* error = nil;  
  2. //(\\w+)(\\s*:\\s*)  
  3. NSRegularExpression* regex = [NSRegularExpression             
  4.                               regularExpressionWithPattern:@"(\\w+)(\\s*:\\s*)" options:0  error:&error];  
  5. NSString* sample = @"{[{a:b,av:a},{a:a,s:a}]}";  
  6. NSLog(@"Start:%@",sample);  
  7. //对给定的字符串进行正则批量替换. $1  $2 表示检索到的部位 打印看结果  
  8. NSString* result = [regex stringByReplacingMatchesInString:sample  
  9.                                                    options:0  
  10.                                                      range:NSMakeRange(0, sample.length)  
  11.                                               withTemplate:@"\"$1\"$2"];  
  12. NSLog(@"Result:%@", result);  


1、直接查找,不使用正则表达式类

NSString *searchText = @ "// Do any additional setup after loading the view, typically from a nib." ;
NSRange range = [searchText rangeOfString:@ "(?:[^,])*\\." <span style= "background-color: #ffcc00;" >options: NSRegularExpressionSearch </span>];
 
if (range.location != NSNotFound ) {
     NSLog (@ "%@" , [searchText substringWithRange:range]);
}

2、使用正则表达式类

NSString *searchText = @ "// Do any additional setup after loading the view, typically from a nib." ;   
NSError *error = NULL ;
NSRegularExpression *regex = [ NSRegularExpression regularExpressionWithPattern:@ "(?:[^,])*\\." options: NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range: NSMakeRange (0, [searchText length])];
if (result) {
     NSLog (@ "%@\n" , [searchText substringWithRange:result.range]);
}

一般的匹配,也就是说只关心第一个匹配的情况下,第一种方式更加简洁;

但是,如果需要匹配多个结果,同时匹配多次的情况下,第二种方式效率会更高

3、字符串替换

NSMutableString *mutableStr = [ NSMutableString stringWithString:searchText];
[mutableStr replaceOccurrencesOfString:@ "\ba\\w+" withString:@ "XYZ" options: NSRegularExpressionSearch range: NSMakeRange (0, [mutableStr length])];
 
NSLog (@ "replaced string: %@" , mutableStr);

NSString是不能修改的,所以没有 replaceOccurrencesOfString 方法的


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值