正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
先介绍个mac端的正则匹配测试软件RegexTester提取码密码: dqgz
;或者用在线匹配.
在开始之前我们还是先来简单了解了解正则表达式语法吧:
方括号:
方括号用于查找某个范围内的字符:
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
量词
常用的大概就是这些,如果想深入了解可以看看正则表达式教程
iOS中有三种实现正则表达式匹配的方法:
1、NSPredicate(谓词)匹配
//手机号简单匹配
NSString *email = @"15173265865";
NSString *regex = @"1[358][0-9]{9}" ;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [predicate evaluateWithObject:email];
2、NSString的API:rangeOfString:option:直接查找
//手机号简单匹配
NSString *searchText = @"15173265865";
NSString *regex = @"1[358][0-9]{9}" ;
NSRange range = [searchText rangeOfString:regex options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"%@", [searchText substringWithRange:range]);
}
3、正则表达式专用类NSRegularExpression
//手机号简单匹配
NSString *searchText = @"15173265865/18551410506";
NSString *regexStr = @"1[358][0-9]{9}";
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
if (error) return;
NSInteger count = [regular numberOfMatchesInString:searchText options:NSMatchingReportCompletion range:NSMakeRange(0, searchText.length)];
//当被检索的字符串太大时,用block控制查找
NSString *searchText = @"15173265865";
NSString *regex = @"1[358][0-9]{9}" ;
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
if (error) return;
[regular enumerateMatchesInString:searchText options:NSMatchingReportCompletion range:NSMakeRange(0, searchText.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
NSRange matchRange = result.range;
NSLog(@"range:%@",NSStringFromRange(matchRange));
NSString *str = [searchText substringWithRange:matchRange];
NSLog(@"%@",str);
}];