2016-11-03 6 views
0

Ich versuche, ein Spiel in einem verschachtelten Array zu finden, wenn eine beliebige Zeichenfolge in einem Array in einem bestimmten Satz enthalten ist.NSPredicate mit Regular Expression Seltsamkeit

Hier ist mein Array

NSArray *menuItems = @[ 
        @[@"beverage", @"drink", @"smoothie", @"coffee", @"juice", @"shakes", @"tea", @"beer"], 
        @[@"breakfast", @"egg", @"omelet", @"bagel", @"yogurt", @"pancake", @"cereal", @"waffle", @"oatmeal", @"parfait", @"yoghurt", @"huevos", @"bacon", @"french toast", @"frittata", @"hash brown", @"muesli", @"quiche"], 
        @[@"omelet", @"brunch", @"pancake", @"waffle", @"huevos", @"bacon", @"blintz", @"sausage", @"casserole", @"crepe", @"egg", @"french toast", @"bacon", @"french toast", @"frittata", @"hash brown", @"muesli", @"quiche", @"salad", @"salmmon", @"soup", @"tartine"], 
        @[@"dessert", @"sweet", @"waffle", @"cake"], 
        @[@"appetizer", @"soup", @"side", @"fruit", @"starter", @"snack", @"bread", @"spread"], 
        @[@"coffee", @"drink", @"beverage", @"espresso", @"cappuccino", @"americano", @"latte", @"macchiato", @"frappuccino", @"flat white"] 
        ]; 

Nun, wenn ich gegen einen bestimmten Satz zu suchen, möchte ich in dem Satz in diesem Array gegen jedes Wort eine beliebige Zeichenfolge übereinstimmen, die der linken Seite übereinstimmt. Also wenn ich einen Satz wie "Heiße Bagels mit Käse" habe, sollte es mit der Zeichenfolge "Bagel" übereinstimmen, die im zweiten Array enthalten ist.

Mein Ansatz ist diese:

NSString *dishName = [NSString stringWithFormat:@"\\b%@\\w*",@"sentence goes here"]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF IN %@", dishName]; 
NSArray *matchedArray = [menuItems filteredArrayUsingPredicate:predicate]; 

if (matchedArray.count>0) { 
    NSLog(@"found match for dish name:%@",@"sentence"); 
} 
else { 
    NSLog(@"Didn't match dish name:%@",@"sentence"); 
} 

nun die Seltsamkeit kommt. Nach dem regulären Ausdruck, den ich bin auf der linken Seite einer Wortgrenze übereinstimmt, so dass es nicht Wildcard tun soll, von der linken Seite entsprechen.

Aber wenn mein Satz ist zum Beispiel: @ "Gegrillter Thunfisch Steak Burrito (1 Stück)" Es entspricht der "Tee" Zeichenfolge in der ersten Reihe für das Wort "Steak".

Jede Idee, warum dies geschieht?

+0

prüfen arbeiten diese http://stackoverflow.com/questions/37919934/nspredicate-for-exact-match – kb920

+0

ich nicht tat möchte dafür ein Blockprädikat verwenden. Wie auch immer, habe meinen Fehler gefunden, sehe meine Antwort – Lefteris

Antwort

0

Ok dumm von mir, ich wurde mit dem „IN“ Vergleich anstelle von „MATCH“ (vergessen sie aus einer früheren Iteration des Codes) verwenden.

die IN STREICHHÖLZER Ändern löste es

aktualisieren

Nein, es es nicht ganz zu lösen, da es nicht Wörter im Satz entsprechen würde. benötigt, um den regulären Ausdruck zu ändern:

NSString *dishName = [NSString stringWithFormat:@"\\b%@\\w*",[@"some sentence here" stringByReplacingOccurrencesOfString:@" " withString:@"|"]]; 

Nun ist es wie erwartet