2012-04-23 10 views
8

Ich benutze NSPredate für die Durchführung der Suche wie auf iPhone, wenn wir nach einer App suchen.NSPredicate für die reguläre Suche

Ich habe zum Beispiel sagen, 4 Schlüsselwörter

  1. Deccan
  2. Neu-Delhi
  3. Ahmedabad
  4. Salaam Delhi

Ich habe versucht, ein Prädikat mit

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'" Schaffung Es gibt mir Deccan als Ausgabe. Aber das Problem ist, ich jedes Wort mit d beginnen will So aus dem obigen Beispiel I-Ausgang benötigen als Deccan, Neu-Delhi, Salaam Delhi aber NICHT Ahmedabad

Stucked in dieser Frage von Stunden. versucht enthält, Streichhölzer, aber mein Pech ..

Jede Hilfe zu richtigem Weg wird sehr geschätzt werden ..

Antwort

13

Danke Jungs für Ihre Antwort s Hier ist, was ich mit

NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText]; 
NSString *predicateString = @"keyword MATCHES[c] %@"; 
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString]; 
1

Es gibt zwei Wege für Sie

  1. Teilen Sie den steing durch ‚‘ und verwenden Sie Ihre NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. Oder der bessere Weg, zwei Prädikate zu verwenden:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"] // i mean,'space+d'

Sie werden also beide mögliche Fälle erfüllen.

+0

danke @Nikita. Es funktioniert mit einzelnen statischen Zeichen. aber nehmen Sie ein Beispiel, wo die Charaktere dynamisch werden. Wenn ich d drücke, erscheinen drei Optionen. Wenn ich 'del' tippe, werden die Schlüsselwörter 2 und 4 angezeigt –

0

Betrachten Sie "wie" und "passt." Beachten Sie jedoch, dass dies relativ teure Vorgänge sind und bei großen Datensätzen viel Zeit in Anspruch nehmen können.

In diesem Beispiel gehe ich davon aus, was Sie wollen in beginnt mit „d“

beginnt Diese prüft, ob Keyword mit ‚d‘ oder eine Sequenz mit einem entweder, wenn eine durch Leerzeichen getrennte Wort entsprechen ist, hat von ‚d‘ gefolgt

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"] 

Dieser einen regulären Ausdruck verwendet, die sehr ähnlich ist (verwenden Sie die Regex, die am besten Suiten Ihre Situation:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"]