Como eu poderia pesquisar / enumerar através de um NSString
usando uma expressão regular?
Uma expressão regular como: /(NS|UI)+(\w+)/g
.
Você precisa usar a class NSRegularExpression
.
Exemplo inspirado na documentação:
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 }];
Se você quer apenas combinar algum padrão em string, existe uma maneira simples de testar o Regular Expression com NSString
:
NSString *string = @"Telecommunication"; if ([string rangeOfString:@"comm" options:NSRegularExpressionSearch].location != NSNotFound) NSLog(@"Got it"); else NSLog(@"No luck");
Note, muitas vezes você vai querer …
if ([string rangeOfString:@"cOMm" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location != NSNotFound) NSLog(@"yes match");
No Swift você pode escrever código como este …
let string = "Telecommunication" if string.rangeOfString("cOMm", options: (NSStringCompareOptions.RegularExpressionSearch | NSStringCompareOptions.CaseInsensitiveSearch)) != nil { print("Got it") } else { print("No luck") }
let string = "Telecommunication" if string.range(of: "cOMm", options: [.regularExpression, caseInsensitive]) != nil { print("Got it") } else { print("No luck") }
Por favor note que o rangeOfString(_:,options:)
e o range(of:options:)
do Swift 4 range(of:options:)
retornam Range
Swift 2 Range
que retorna nil se a pesquisa falhou