OC-正規表現

4935 ワード

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つのオブジェクトオブジェクトに1つの文字列、出力結果は配列)
 2).スタイルルール
             NSString *pattern = @"ab7";[]:内部の文字を見つけてください.
|:orまたは
\:エスケープ文字、特殊文字を区切ることができます.たとえば[,\を付けないと[]内部の内容が見つかります.
     .:省略記号
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ビット
            NSString *pattern = @"\\d{2,4}|\\d\\d\\d";  
     ? + *     ? : 0個または1個+:少なくとも1個//常用*:0個または複数
^トップ$は最下位を表します
    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}$"];
}