美文网首页
正则表达式在iOS项目的应用

正则表达式在iOS项目的应用

作者: 一吻江山 | 来源:发表于2016-12-05 21:43 被阅读27次

    iOS正规表达式NSRegularExpression支持单行模式和多行模式、支持非贪婪模式

    NSString *search = @"abccccccc";
            
    //贪婪@"^abc+" 匹配到"abccccccc"
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^abc+" options:0 error:NULL];
            
    //非贪婪@"^abc+?" 匹配到"abc"
    NSRegularExpression *regex2 = [NSRegularExpression regularExpressionWithPattern:@"^abc+?" options:0 error:NULL];
    

    Xcode支持正则查找和正则替换

    应用1

    像objectAtIndex旧语法可能会有告警,用正则查找替换加快效率:

    objectAtIndex旧语法替换.png
    正则查找:
    \[(\s*)([^\[]+)(\s+)objectAtIndex(\s*):(\s*)([^\]]+)\]
    
    正则替换:
    $2\[$6\]
    

    我们工程实践正确率98%,此类型替换错误:

    aLine = (__bridge CTLineRef)[(__bridge NSArray *)(firstLines) objectAtIndex:j];
    aLine = (__bridge CTLineRef)(__bridge NSArray *)(firstLines)[j];
    

    应用2

    [NSArray count]替换为NSArray.count

    正则查找:
    \[(\s*)([^\[]+)(\s+)count(\s*)\]
    
    正则替换:
    $2.count
    

    应用3

    为多国语,在项目中查找字符串
    我们项目中如下的语句:

    DDLogVerbose(@"接收到服务器的数据%@", data);
    NSLog(@"包含中文的字符串");```
    这些语句中的字符串不需要多国语化,可用如下的正则表达式来排除:
    正则查找:
    ```(?<!(//.{0,200})|(DDLogVerbose\()|(NSLog\())@"([\x{4e00}-\x{9fa5}]+)([^"]*)"```
    
    注意:这个正则不能提取非中文开头但含中文的字符串
    注意:Xcode在(?<!)中好像不支持使用*元字符,所以只好变通下,用{0,200}来模拟*,这里200是随便取的,只要大一点就好
    注意:[\x{4e00}-\x{9fa5}]为中文字符范围

    相关文章

      网友评论

          本文标题:正则表达式在iOS项目的应用

          本文链接:https://www.haomeiwen.com/subject/opslmttx.html