Я пытаюсь найти совпадение в вложенном массиве, если любая строка в массиве содержится в данном предложении.NSPredicate с регулярным выражением weirdness
Вот мой массив
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"]
];
Теперь, когда я искать против данного предложения, я хочу, чтобы соответствовать любой строке в этом массиве против любого слова в предложении, что соответствует левой стороне. Так что, если у меня есть предложение типа «Горячие рогалики с сыром», оно должно соответствовать строке «бублик», содержащейся во втором массиве.
Мой подход такой:
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");
}
Сейчас идет странность. Согласно регулярному выражению, я сопоставляю слева границу слова, поэтому он не должен использовать подстановочные знаки слева.
Однако, когда мое предложение является, например: @ «Жареный стейк из тунца Burrito (1 шт)» Это соответствует «чай» строка в первом массиве для слова «Стейк».
Любая идея, почему это происходит?
Проверьте это http://stackoverflow.com/questions/37919934/nspredicate-for-exact-match – kb920
я не сделал хотите использовать предикат блока для этого. Во всяком случае, нашел свою ошибку, см. Мой ответ – Lefteris