Search through NSString using Regular Expression

前端 未结 2 2054
闹比i
闹比i 2020-11-27 05:47

How might I go about searching/enumerating through an NSString using a regular expression?

A regular expression such as: /(NS|UI)+(\\w+)/g.

相关标签:
2条回答
  • 2020-11-27 06:05

    If you just want to match some pattern in string, there is a simple way to test Regular Expression with NSString:

    NSString *string = @"Telecommunication";
    
    if ([string rangeOfString:@"comm" options:NSRegularExpressionSearch].location != NSNotFound)
    
        NSLog(@"Got it");
    
    else
    
        NSLog(@"No luck");
    

    Note, often you'll want ...

    if ([string rangeOfString:@"cOMm"
      options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location
      != NSNotFound)
         NSLog(@"yes match");
    

    In Swift you may write code like this ...

    Swift 2

        let string = "Telecommunication"
    
        if string.rangeOfString("cOMm", options: (NSStringCompareOptions.RegularExpressionSearch | NSStringCompareOptions.CaseInsensitiveSearch)) != nil {
            print("Got it")
        } else {
            print("No luck")
        }
    

    Swift 4

        let string = "Telecommunication"
    
        if string.range(of: "cOMm", options: [.regularExpression, caseInsensitive]) != nil {
            print("Got it")
        } else {
            print("No luck")
        }
    

    Please take note that Swift 2's rangeOfString(_:,options:) and Swift 4's range(of:options:) return Range<String.Index>? that returns nil if search failed

    0 讨论(0)
  • 2020-11-27 06:21

    You need to use NSRegularExpression class.

    Example inspired in the documentation:

    NSString *yourString = @"";
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression         
        regularExpressionWithPattern:@"(NS|UI)+(\\w+)"
        options:NSRegularExpressionCaseInsensitive
        error:&error];
    [regex enumerateMatchesInString:yourString options:0 range:NSMakeRange(0, [yourString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
        // your code to handle matches here
    }];
    
    0 讨论(0)
提交回复
热议问题