web-dev-qa-db-fra.com

Recherche dans NSString à l'aide d'une expression régulière

Comment puis-je procéder pour rechercher/énumérer un NSString en utilisant une expression régulière?

Une expression régulière telle que: /(NS|UI)+(\w+)/g.

39
Joshua

Vous devez utiliser la classe NSRegularExpression .

Exemple inspiré de la 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
}];
57
Pablo Santa Cruz

Si vous souhaitez simplement faire correspondre un modèle dans une chaîne, il existe un moyen simple de tester l'expression régulière avec NSString:

NSString *string = @"Telecommunication";

if ([string rangeOfString:@"comm" options:NSRegularExpressionSearch].location != NSNotFound)

    NSLog(@"Got it");

else

    NSLog(@"No luck");

Remarquez que souvent vous voudrez ...

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

Dans Swift vous pouvez écrire du code comme celui-ci ...

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")
    }

Veuillez noter que Swift 2's rangeOfString(_:,options:) et Swift 4's range(of:options:) return Range<String.Index>? Qui renvoie zéro si la recherche a échoué

35
vedrano