2016-11-03 6 views
0

Я пытаюсь найти совпадение в вложенном массиве, если любая строка в массиве содержится в данном предложении.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 шт)» Это соответствует «чай» строка в первом массиве для слова «Стейк».

Любая идея, почему это происходит?

+0

Проверьте это http://stackoverflow.com/questions/37919934/nspredicate-for-exact-match – kb920

+0

я не сделал хотите использовать предикат блока для этого. Во всяком случае, нашел свою ошибку, см. Мой ответ – Lefteris

ответ

0

О, глупо, я использовал сравнение «IN» вместо «MATCHES» (забыли об этом из предыдущей итерации кода).

Изменения IN на спички не решил, что

Update

Нет это не совсем решить, как это не будет соответствовать словам в предложении. Необходимо, чтобы изменить регулярное выражение:

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

Сейчас она работает, как ожидалось

 Смежные вопросы

  • Нет связанных вопросов^_^