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));
}];
网友评论