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 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章