Как проверить, соответствует ли строка регулярному выражению в target-c? - PullRequest
26 голосов
/ 25 апреля 2011

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

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

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

Ответы [ 4 ]

55 голосов
/ 25 апреля 2011

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

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

if ([myTest evaluateWithObject: testString]){
//Matches
}
23 голосов
/ 17 февраля 2013

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

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

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

3 голосов
/ 28 мая 2011
2 голосов
/ 28 мая 2011

Используйте метод -isMatchedByRegex:.

if([someString isMatchedByRegex:@"^[0-9a-fA-F]+:"] == YES) { NSLog(@"Matched!\n"); }
...