Как проверить, соответствует ли строка регулярному выражению в ta rget-c?

Поскольку регулярные выражения не поддерживаются в Какао, я считаю RegexKitLite очень полезным. Но все примеры извлекают совпадающие строки.

Я просто хочу проверить, соответствует ли строка регулярному выражению и получить Да или Нет.

Как я могу это сделать?

4 ответа

Решение

Я использовал NSPredicate для этой цели:

NSString *someRegexp = ...; 
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", someRegexp]; 

if ([myTest evaluateWithObject: testString]){
//Matches
}

Еще один способ сделать это, который немного проще, чем с помощью NSPredicate почти недокументированный вариант для NSString -rangeOfString:options::

NSRange range = [string rangeOfString:@"^\\w+$" options:NSRegularExpressionSearch];
BOOL matches = range.location != NSNotFound;

Я говорю "почти недокументировано", потому что сам метод не отображает опцию как доступную, но если вы столкнетесь с документацией для операторов поиска и сравнения и найдете NSRegularExpressionSearch вы увидите, что это правильный вариант для -rangeOfString... методы начиная с OS X 10.7 и iOS 3.2.

Использовать -isMatchedByRegex: метод.

if([someString isMatchedByRegex:@"^[0-9a-fA-F]+:"] == YES) { NSLog(@"Matched!\n"); }
Другие вопросы по тегам