2014-02-19 4 views
4

Итак, я пытаюсь выполнить поиск по основным данным. Скажем, у моего CoreData есть два поля: NSString (мы назовем их foo & бар). Пользователь дает указание, какое поле искать и строку поиска. Сейчас я использую этот код:Поиск CoreData с использованием регулярных выражений и специальных символов

NSString *format = [NSString stringWithFormat:@"(%@ matches[c] %@)", field, @"%@"]; 

// Double-escape that slash 
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", partialString]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, pattern]; 

[fetchRequest setPredicate:predicate]; 

Поле передается как «foo» или «bar». Частичная строка - это строка поиска. Если bar содержит «Grand Poobah», я хочу, чтобы он соответствовал, когда «Poo» - это строка запроса (но не тогда, когда она «oobah», поэтому у меня есть \ b в регулярном выражении).

Но вопрос у меня есть, если кто-то дает запрос о «Poo (» он выходит из строя, потому что он получает интерпретируется как часть regex.

Это лучший маршрут, чтобы просто избежать все специальные символы в partialString перед тем ? построение рисунка Или есть какой-то другой способ, которым я должен строить предикат

ответ

7

Да, вы должны избежать всех специальных символов в строке поиска, и есть простой способ сделать это:

NSString *escapedString = [NSRegularExpression escapedPatternForString:partialString]; 
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", escapedString]; 

Но вы не должны использовать stringWithFormat для построения строки формата предиката (как в вашей первой строке ). Просто продолжайте

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES[c] %@", field, pattern]; 

Обратите внимание, что %K формата предикат должен использоваться для ключа пути подстановки а.

+0

Спасибо. Использование stringWithFormat не понравилось, но когда я попытался конденсировать его, он все время рушился. Но в тот момент мне не хватало% K. – bryan

+0

bro этот код соответствует только первым символам, а что же остальное может у вас, пожалуйста, помогите мне ... мне нужно найти символ из строки –

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