2010-03-16 4 views
11

Может кто-нибудь, пожалуйста, помогите мне с использованием Regex с NSPredicate?NSPredicate и Regex

NSString *regex = @"(?:[A-Za-z0-9])"; 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
if ([pred evaluateWithObject:mystring]) 
{ 
    //do something 
} 

тестирование вышеуказанного wth mystring - qstring123, похоже, не работает. Я ожидаю, что он войдет в условие if, потому что он предположительно должен соответствовать регулярному выражению.

Кроме того, мне нужно регулярное выражение для альфа-номера, разрешающее запятые и пробелы.

будет ли это работать?

@"(?:[A-Za-z0-9])*(?:,[A-sa-z0-9)*(?:\s[A-sa-s0-9])" 

Просьба помочь.

ответ

8

Из моих экспериментов он пытается сопоставить регулярное выражение со всей строкой и не будет соответствовать внутри строки.

Поэтому регулярное выражение [a-zA-Z0-9]+ работает, но [a-zA-Z0-9] нет.

Имея это в виду, вы можете захотеть переделать свой предикат, соответствующий запятой, или использовать более полнофункциональное регулярное выражение, такое как удивительно удивительное RegexKit and RegexKitLite.

+0

duh 'я пропустил + в конце. Я действительно использовал *, и это сработало. Какая разница? – Dave

+2

'*' соответствует 0 или более раз, '+' соответствует 1 или более раз. –