OC中一般正则表达式的使用方法为2步
1.创建一个正则表达式对象
2.利用正则表达式来测试对应的字符串
例如
NSString *checkString = @"a34sd231"; //1.创建正则表达式,[0-9]:表示‘0’到‘9’的字符的集合 NSString *pattern = @"[0-9]"; //1.1将正则表达式设置为OC规则 NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; //2.利用规则测试字符串获取匹配结果 NSArray *results = [regular matchesInString:checkString options:0 range:NSMakeRange(0, checkString.length)]; NSLog(@"%ld",results.count);
获取打印结果,从checkString上分析为数字的字符有5
所以可以得出一个结论,正则表达式的作用就是把多可字符串杂糅到一个表达式中
到这里就能大概明白正则表达式的意义了,接下来介绍一部分常用的正则表达式字符
/* []:找到内部的某一个字符 [a-zA-Z0-9] ===> 代表字符或数字 \\d ====>代表数字 {2}:代表有2个 {2,4}:代表有2到4个 // ? + * ^ $ . ?: 代表0或1个 +: 代表至少1个 *: 代表0个或多个 ^: 代表以...开头 $: 代表以...结束 .: 代表除换行符以外的任意字符 */ //代表一个数字字符 NSString *pattern = @"\\d"; //代表2到5个连续的数字 NSString *pattern = @"\\d{2,5}"; //qq账号的正则表达式 NSString *pattern = @"^[1-9]\\d{4,10}"; //电话号码格式的正则表达式 NSString *pattern = @"^((13[0-9])|(15[3-5])|(18[07-9]))\\d{8}$" //邮箱的正则表达式 NSString *pattern =@"^.*@..+\\.[a-zA-Z]{2,4}$"
这样根据需要的匹配规则来设定正则表达式就可以判断字符串是否为符合类型
若有一个长串字符串就要对其中部分进行表情、url、@(呼叫)或#话题# 的匹配判断
则需要多个正则表达式来进行判断
//需要被筛选的字符串NSString *str = @"#今日要闻#[偷笑] http://asd.fdfs.2ee/aas/1e @sdf[test] #你确定#@rain李23: @张三[挖鼻屎]m123m"; //表情正则表达式 // \\u4e00-\\u9fa5 代表unicode字符 NSString *emopattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]"; //@正则表达式 NSString *atpattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+"; //#...#正则表达式 NSString *toppattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#"; //url正则表达式 NSString *urlpattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; //设定总的正则表达式 NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@",emopattern,atpattern,toppattern,urlpattern]; //根据正则表达式设定OC规则 NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; //获取匹配结果 NSArray *results = [regular matchesInString:str options:0 range:NSMakeRange(0, str.length)]; //NSLog(@"%@",results); //遍历结果 for (NSTextCheckingResult *result in results) { NSLog(@"%@ %@",NSStringFromRange(result.range),[str substringWithRange:result.range]); }
获得结果
有了上面的演示就可以大致写出系统方法使用的正则表达式了