一、Xcode的類:NSRegularExpression
使用正則表達式的步驟:
step一、定義規則(NSString)
step二、建立正則表達式的對象(NSRegularExpression)
step三、匹配字符串,返回數組(NSArray:存儲的對象是NSTextCheckingResult類型的對象)
注意:在Xcode中
若是規則裏有引號,就用「\」來表示字符的自己
//----------------------------------------------------------------
NSString *username = @"6gjkhdjkhgkjh7
」;//要匹配的字符串
1.定義規則
NSString *pattern = @"^\\d.*\\d$";
二、建立正則表達式對象
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
3.匹配字符串
NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
NSLog(@"%zd", results.count);
// 遍歷結果
for (NSTextCheckingResult *result in results) {
NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
}
//——例2-----------------------
/**
1.判斷字符串是否符合某個特定規則
* 判斷某個字符串是否爲QQ號碼\電話號碼\郵箱
*/
// 表情的規則
NSString *emotionPattern = @"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]";
// @的規則
NSString *atPattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";
// #話題#的規則
NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
// url連接的規則
NSString *urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
// | 匹配多個條件,至關於or\或
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.匹配字符串
NSArray *results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
// 3.遍歷結果
for (NSTextCheckingResult *result in results) {
NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
}
//----------------------------------------------------------------
二、第三方庫 RegexKitLite
這個庫使用了分類(category)對NSString類進行了擴展
準備工做:
注:加載framework libicucore.dylib ,由於RegexKitLite是調用這個裏面的API,蘋果規定過不能使用私有的api和沒有發佈的api。RegexKitLite對NSString作了擴展,所以,咱們能夠直接對NSString對象進行正則表達式的匹配。
//----------------------------------------------------------------
使用:
//一、用數組返回的結果,是Unicode編碼
NSArray *cmps = [str componentsMatchedByRegex:pattern];
//二、遍歷全部的匹配結果,一個一個輸出
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//*capturedStrings:用指針獲取返回的值
//Range:返回起始位置和匹配到的字符串長度
//*stop =YES;//就會中止遍歷
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
//三、以正則表達式爲切割符,返回匹配到的結果以外的字符串
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//*capturedStrings:用指針獲取返回的值
//Range:返回起始位置和匹配到的字符串長度
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];