OC-正則表達式

1.普通的作法

//檢測全數字
void test()
{
    NSString *username = @"5347858h7";
    
    BOOL flag = YES;
    for (int i = 0; i<username.length; i++) {
        unichar c = [username characterAtIndex:i];
        if (!(c >= '0' && c <= '9')) {
            flag = NO;
            break;
        }
    }
    
    if (flag) {
        NSLog(@"用戶名正確");
    } else {
        NSLog(@"裏面包含了非數字");
    }
}


2.正則表達式

 1).使用正則表達式的步驟:
     1>.建立一個正則表達式對象:定義規則
     2>.利用正則表達式對象來測試 相應的字符串( 1個對象對象一個字符串,輸出結果是數組) 
正則表達式

 2).樣式\規則數組

             NSString *pattern = @"ab7";                    
     [] : 找到內部的某一個字符便可框架

     |   :匹配多個條件,至關於or\或測試

     \\  :轉義字符,能夠隔開特殊字符,如[,若是不加\\,會識別爲找到[]內部的內容  ui

     .   :  省略符
url

            eg: \\[.+\\]  表示 [.................] 括號以及括號內的內容
            NSString *pattern = @"[0123456789]";
            NSString *pattern = @"[0-9]";
            NSString *pattern = @"[a-zA-Z0-9]";   表示a~z和A~z和0~9 不須要空格
            NSString *pattern = @"[0-9][0-9]";
            NSString *pattern = @"\\d\\d\\d";        \\d表明數字
            NSString *pattern = @"\\d{2,4}";        {2,4} 2到4位spa

            NSString *pattern = @"\\d{2,4}|\\d\\d\\d";  
code

     ? + *
     ? : 0個或者1個
     + : 至少1個     //經常使用
     * : 0個或者多個
    component

     ^表明首位  $表明末位orm

    NSString *username = @"6gjkhdjkhgkjh7";
    //        NSString *pattern = @"^\\d{3}";  //首位爲數字且連續3個數字
    //        NSString *pattern = @"\\d{3}$";  //末位爲數字且連續3個數字
    // 1.建立正則表達式
    NSString *pattern = @"^\\d.*\\d$"; // 意思是首位爲數字 .是省略*多個省略 末位也爲數字
    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
    
    // 2.測試字符串
    NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
    
    NSLog(@"%zd", results.count);


3.應用場景和RegexKitLite使用

1.
//微博高亮
        NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放軍#//http://foo.com/blah_blah @Ring花椰菜:就#范德薩發生的#捨不得打[test] 就慣#急急急#着他吧[挖鼻屎]//@崔西獅:小拳頭舉起又放下了 說點啥好呢…… //@toto97:@崔西獅 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";       
        // 表情的規則
        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]|/)))";
        NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
//        NSArray *cmps = [str componentsMatchedByRegex:pattern];
        
        //第一種方法:遍歷全部的匹配結果
         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的使用
        1.須要導入libicucore框架
        2.由於是非arc,須要在Build Phases-->Compile Sources-->RegexKitLite.m-->添加-fno-objc-arc
        
        // 第二種方法:遍歷全部的匹配結果
        [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
        }];
        
        NSLog(@"-------------");
        
        // 以正則表達式爲分隔符
        [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
        }];
    }




2.
- (BOOL)match:(NSString *)pattern
{
    // 1.建立正則表達式
    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
    // 2.測試字符串
    NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
    
    return results.count > 0;
}

//是不是QQ號
- (BOOL)isQQ
{
    // 1.不能以0開頭
    // 2.所有是數字
    // 3.5-11位
    return [self match:@"^[1-9]\\d{4,10}$"];
}

//是不是手機號碼
- (BOOL)isPhoneNumber
{
    // 1.所有是數字
    // 2.11位
    // 3.以13\15\18\17開頭
    return [self match:@"^1[3578]\\d{9}$"];
    // JavaScript的正則表達式:\^1[3578]\\d{9}$\
    
}

//是不是ip地址
- (BOOL)isIPAddress
{
    // 1-3個數字: 0-255
    // 1-3個數字.1-3個數字.1-3個數字.1-3個數字
    return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"];
}
相關文章
相關標籤/搜索