正则表达式在实际开发中,常常是为了获取文本中的一些信息,比如邮箱地址,手机号码,http网址之类的截取需求.
假设现在手机上有一条这样的信息,如果我想拨打电话给信息显示里面告知的手机号码,如果手机没有给我们讲号码处理出来,那么我们可能就需要先将号码抄下,再拨号出去,这样显得客户体验不好,所以正则表达式就派上用场了.
代码:
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* message = @"你好,我的手机号码是13800138000,请登录网址http://www.housnk.com向我发一条询价邮件,我的邮箱是housnk@housnk.com";
NSString* pattern = @"1[3578]\\d{9}";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0,message.length)];
if(resultArray.count){
for (NSTextCheckingResult* result in resultArray) {
NSLog(@"%@",[message substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果:
RegularExpression04[3443:303] 13800138000
@”1[3578]\d{9}”这个检索规则的意思是,以1开头,接着第二个字符是”3”,”5”,”7”,”8”中的一个,然后就是9位数字,这样就组成手机号码了.
现在我想要登录www.housnk.com这个网站了,同样最好就是用正则表达式处理出来.
代码:
int main(int argc,我的邮箱是housnk@housnk.com";
// NSString* pattern = @"1[3578]\\d{9}";
NSString* pattern = @"http(s://|://)?(|www).\\w{2,}.(cn|com|org|net)";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0,[message substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果:
RegularExpression04[3580:303] http://www.housnk.com
其实上述的规则还不是很严谨,如果是实际的地址,可能是http: //www.housnk.com/login/user这样的网址,所以不是很严谨,所以我们只要匹配以http或者https和www开头的网址,不以汉字为结尾的规则就可以了,
代码示例:
int main(int argc,我的邮箱是housnk@housnk.com";
// NSString* pattern = @"1[3578]\\d{9}";
// NSString* pattern = @"http(s://|://)?(|www).\\w{2,}.(cn|com|org|net)";
NSString* pattern = @"http(s://|://)?(|www).[^\u4e00-\u9fa5]{2,}";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0,[message substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果:
RegularExpression04[836:303] http://www.housnk.com