使用正则筛选字符串

2018-06-13  本文已影响10人  HH思無邪
匹配结果.png

1. 正则基础应用

voidtest1(){
    /**
     * 1.创建正则表达式
     * 1.1定义规则
     */
    // Pattern : 样式\规则

    //        NSString *pattern = @"ab7”;

    //\\u4e00-\\u9fa5 中文匹配

    // [] : 找到内部的某一个字符即可

    //        NSString *pattern = @"[0123456789]";

    //        NSString *pattern = @"[0-9]";

    //        NSString *pattern = @"[a-zA-Z0-9]";

    //        NSString *pattern = @"[0-9][0-9]";

    //        NSString *pattern = @"\\d\\d\\d";

    //        NSString *pattern = @"\\d{2,4}";

    //\\u4e00-\\u9fa5 中文匹配

    // ? + *

    // ? : 0个或者1个

    // + : 至少1个

    // * : 0个或者多个

    NSString*pattern=@"[0-9a-zA-Z]";

    NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:pattern options:0error:nil];

    /**
     2.测试字符串
     *regex 正则表达式

     *userName 测试的字符串

     *range 测试范围

     */
    //被测试字符串

    NSString*userName=@"19712345678";

    NSArray*results = [regex matchesInString:userName options:0range:NSMakeRange(0, userName.length)];

    NSLog(@"--results个数--%ld", results.count);
}

2. //遍历所有字符串打印结果

NSString*str = @"#呵呵呵#[偷笑] [http://foo.com/blah_blah](http://foo.com/blah_blah)#解放军#//[http://foo.com/blah_blah](http://foo.com/blah_blah)@Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# [http://foo.com/blah_blah](http://foo.com/blah_blah)";

    // #话题#的规则

    NSString*topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";

    // 表情

    NSString* expressionpattern=@"\\[[\\u4e00-\\u9fa5]+\\]";

    //@规则

    NSString* atcpattern=@"@[\\u4e00-\\u9fa5]+";

    // | 匹配多个条件,相当于or\或

    NSString*pattern=[NSStringstringWithFormat:@"%@|%@|%@",topicPattern,expressionpattern,atcpattern];

    NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:pattern options:0error:nil];

    NSArray*results = [regex matchesInString:str options:0range:NSMakeRange(0, str.length)];

    //遍历匹配结果

    for(NSTextCheckingResult*result inresults){

        NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);

}

3. RegexKitLite 框架强大的正则辅助框架

框架使用https://www.jianshu.com/p/e73ea78ba8f9

项目更改:

非ARC支持.png
添加字符串依赖库libicuco.png

4. 使用框架做事情

       NSString*str = @"#呵呵呵#[偷笑] [http://foo.com/blah_blah](http://foo.com/blah_blah)#解放军#//[http://foo.com/blah_blah](http://foo.com/blah_blah)@Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# [http://foo.com/blah_blah](http://foo.com/blah_blah)";

        // #话题#的规则

        NSString*topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";

        // 表情

        NSString* expressionpattern=@"\\[[\\u4e00-\\u9fa5]+\\]";

        //@规则

        NSString* atcpattern=@"@[\\u4e00-\\u9fa5]+";

        // url链接的规则

        NSString*urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";

        // | 匹配多个条件,相当于or\或

        NSString*pattern=[NSStringstringWithFormat:@"%@|%@|%@|%@",topicPattern,expressionpattern,atcpattern,urlPattern];

        //简单打印

//        NSArray *results=[str componentsSeparatedByRegex:pattern];

//        NSLog(@"--results--%@", results);

        //遍历所有匹配结果

        [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSIntegercaptureCount, NSString*const__unsafe_unretained*capturedStrings, constNSRange*capturedRanges, volatileBOOL*conststop) {

            NSLog(@"%@ %@ ",*capturedStrings,NSStringFromRange(*capturedRanges));

        }];
        NSLog(@"-------------");
        // 以正则表达式为分隔符
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSIntegercaptureCount, NSString*const__unsafe_unretained*capturedStrings, constNSRange*capturedRanges, volatileBOOL*conststop) {

            NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
        }];

上一篇 下一篇

猜你喜欢

热点阅读