正則表達式,又稱正規(guī)表示法、常規(guī)表示法住拭。(英語:Regular Expression摇零,在代碼中常簡寫為regex、regexp或RE)沽甥,計算機科學的一個概念声邦。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則摆舟。在很多文本編輯器里亥曹,正則表達式通常被用來檢索、替換那些符合某個模式的文本恨诱。
先介紹個mac端的正則匹配測試軟件RegexTester提取碼密碼: dqgz
媳瞪;或者用在線匹配.
在開始之前我們還是先來簡單了解了解正則表達式語法吧:
方括號:
方括號用于查找某個范圍內的字符:
Paste_Image.png
元字符
元字符(Metacharacter)是擁有特殊含義的字符:
Paste_Image.png
量詞
Paste_Image.png
常用的大概就是這些,如果想深入了解可以看看正則表達式教程
iOS中有三種實現(xiàn)正則表達式匹配的方法:
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);
}];