匹配字符串格式

时间:2011-10-06 10:52:14

标签: iphone objective-c ios

如何才能执行字符串匹配,就像regex

一样

例如我有一个字符串数组,如果这些字符串的格式为"abc def xxx"xxx的数字为111,我想匹配,12100111

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

数组:

NSArray *array1 = [NSArray arrayWithObjects:@"abc def 1", @"abc def 64", @"abc def 853", @"abc def 14", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"abc def 3", @"abc def 856", @"abc def 36", @"abc def 5367", nil];

正则表达式:

NSString *regex = @"abc def [0-9]{1,3}";

检查数组中的所有字符串是否与正则表达式匹配:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL description MATCHES %@", regex];
BOOL allStringsMatch = [predicate evaluateWithObject:array1]; 
// OUTPUT: YES
allStringsMatch = [predicate evaluateWithObject:array2];
// OUTPUT: NO

array1 中的所有对象都与正则表达式匹配,但 array2 包含字符串 @“abc def 5367”,它与正则表达式不匹配

获取匹配的字符串:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"description MATCHES %@", regex];
NSArray *unmatchedStrings = [array2 filteredArrayUsingPredicate:predicate];
// OUTPUT: { @"abc def 3", @"abc def 856", @"abc def 36" }

获取不匹配的字符串:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT description MATCHES %@", regex];
NSArray *unmatchedStrings = [array2 filteredArrayUsingPredicate:predicate];
// OUTPUT: { @"abc def 5367" }

请注意,谓词中的“description” NSString - description 方法。

答案 1 :(得分:0)