正則表達式使用

一、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-----------------------
 
NSString *str = @"#呵呵呵#[偷笑]  http://foo.com/blah_blah #解放軍#//http://foo.com/blah_blah @Ring花椰菜:就#范德薩發生的#捨不得打[test] 就慣#急急急#着他吧[挖鼻屎]//@崔西獅:小拳頭舉起又放下了 說點啥好呢…… //@toto97:@崔西獅 蹦米咋不揍他#哈哈哈#  http://foo.com/blah_blah";
/**
 1.判斷字符串是否符合某個特定規則
 * 判斷某個字符串是否爲QQ號碼\電話號碼\郵箱
 2.截取字符串中符合某個特定規則的內容
 * 截取@"#呵呵呵#[偷笑]5345  http://foo.com/blah_blah #解放軍# 58937985"的全部話題\表情\連接
 */
// 表情的規則
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));
}];
相關文章
相關標籤/搜索