iOS 正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 正则表达式相关的知识,希望对你有一定的参考价值。

下面介绍的是ios的一个第三方库,RegexKitLite 。使用起来是非常方便的,不过是2008年写的,MAC模式,我们在使用的时候,需要作两步操作。

RegexKitLite 导入

我们在githud中下载下来,将RegexKitLite.h 和 RegexKitLite.m 添加到项目中。

1.让RegexKitLite支持ARC,使用 -fno-objc-arc 标记即可.

2.导入libicucore.tbd动态库

RegexKitLite 使用

1.单个正则符合匹配,返回匹配集合

(NSArray *)RKL_METHOD_PREPEND(componentsMatchedByRegex):(NSString *)regex  :匹配符合正则的集合数组

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

输出:

2.多个正则组合匹配

        NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";
        
        // 表情的规则
        NSString *emotionPattern = @"\\\\[[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+\\\\]";
        // @的规则
        NSString *atPattern = @"@[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+";
        // #话题#的规则
        NSString *topicPattern = @"#[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+#";
        // url链接的规则
        NSString *urlPattern = @"\\\\b(([\\\\w-]+://?|www[.])[^\\\\s()<>]+(?:\\\\([\\\\w\\\\d]+\\\\)|([^[:punct:]\\\\s]|/)))";
        // 组合多个正则条件
        NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
        
        NSArray *cmps = [str componentsMatchedByRegex:pattern];
        
        NSLog(@"%@",cmps);

输出:

3.遍历所有的匹配结果,包括范围

enumerateStringsMatchedByRegex

volatile BOOL *const stop :表示找到合适的就停止。

        NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";
        
        // 表情的规则
        NSString *emotionPattern = @"\\\\[[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+\\\\]";
        // @的规则
        NSString *atPattern = @"@[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+";
        // #话题#的规则
        NSString *topicPattern = @"#[0-9a-zA-Z\\\\u4e00-\\\\u9fa5]+#";
        // url链接的规则
        NSString *urlPattern = @"\\\\b(([\\\\w-]+://?|www[.])[^\\\\s()<>]+(?:\\\\([\\\\w\\\\d]+\\\\)|([^[:punct:]\\\\s]|/)))";
        // 组合多个正则条件
        NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
              
        // 遍历所有的匹配结果
        [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
        }];

输出:

4.以正则表达式为分隔符,相当于取返

enumerateStringsSeparatedByRegex

        [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
        }];

输出:

 

源代码下载:http://pan.baidu.com/s/1pLMmOQ3

 

以上是关于iOS 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

iOS 使用正则表达式库RegexKitLite的问题

OC - 正则表达式 - RegexKitLite

常用正则表达式 总结

常用正则表达式 总结

iOS-如何返回某个字符串的拼音助记码

iOS正则表达式的使用案例-富文本