NSString *string = @"A long term stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
if(match){
NSLog(@"found");
} else {
NSLog(@"not found");
}
Como posso pesquisar se a expressão está presente na string ou não. o código acima está funcionando para uma palavra. mas não se eu colocar mais algumas palavras na string a ser pesquisada
Respostas:
1 para resposta № 1Se você deseja verificar uma string com um valor regex, use NSRegularExpression
não NSPredicate
.
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"stack(.*).html" options:0 error:nil];
Depois, você pode usar as funções para encontrar correspondências ...
NSString *string = @"stackoverflow.html";
NSUInteger matchCount = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, string.length)];
NSLog(@"Number of matches = %d", matchCount);
Nota: Eu sou péssimo em criar padrões regex, então acabei de usar seu padrão e exemplo. Não tenho idéia se o padrão realmente encontrará uma correspondência nessa string, mas se houver uma correspondência, ela funcionará.
1 para resposta № 2
NSPredicate
corresponde apenas a cadeias completas, portanto, você deve alterar seu padrão para cobrir toda a cadeia:
NSString *expression = @".*stack(.*).html.*";
No entanto, seu padrão original também corresponderá a algo como "empilhar meus arquivos em html", portanto, você pode ler sobre seus padrões de expressão regular.
-1 para resposta № 3
Melhore sua pergunta, mas veja a resposta abaixo para sua pergunta
NSString *string = @"This is the main stringsss which needs to be searched for some text the texts can be any big. let us see";
if ([string rangeOfString:@"."].location == NSNotFound) {
NSLog(@"string does not contains");
} else {
NSLog(@"string contains !");
}