将字符串与多个模式匹配
Matching a string against multiple patterns
我对一个非常简单的问题的解决方案风格有疑问。
我有一个程序可以将文件名列表与多种模式进行匹配。如果文件名与模式匹配,则文件被重命名并且计数器递增。
目前我正在匹配 4 种不同的模式
if ([file rangeOfString:pattern].location != NSNotFound) {
counter ++;
//rename file...
}
if ([file rangeOfString:pattern2].location != NSNotFound) {
counter2 ++;
//rename file...
}
[...]
该解决方案运行良好但无法扩展。如果我必须匹配更多的模式。
所以我考虑使用类似
的东西
NSString *someRegexp = ...;
NSPredicate *myTest = [NSPredicate predicateWithFormat:file, someRegexp];
if ([myTest evaluateWithObject: testString]){
}
但是,我看不出有任何方法可以增加此类解决方案中的计数器,因为它们取决于精确匹配....
所以我想知道这里是否有人知道更多 comprehensive/nice 解决这个问题的方法......
提前致谢
诺伯特
如何子类化 NSString,添加一个计数器来跟踪 match count
。
@interface PatternMatchingString : NSString
@property (readwrite) NSUInteger matchCount;
@end
-(void)patternMatching
{
for(PatternMatchingString *pattern in arrayOfPatterns)
{
if([file rangeOfString:pattern].location != NSNotFound)
pattern.matchCount++;
}
}
我对一个非常简单的问题的解决方案风格有疑问。
我有一个程序可以将文件名列表与多种模式进行匹配。如果文件名与模式匹配,则文件被重命名并且计数器递增。
目前我正在匹配 4 种不同的模式
if ([file rangeOfString:pattern].location != NSNotFound) {
counter ++;
//rename file...
}
if ([file rangeOfString:pattern2].location != NSNotFound) {
counter2 ++;
//rename file...
}
[...]
该解决方案运行良好但无法扩展。如果我必须匹配更多的模式。
所以我考虑使用类似
的东西NSString *someRegexp = ...;
NSPredicate *myTest = [NSPredicate predicateWithFormat:file, someRegexp];
if ([myTest evaluateWithObject: testString]){
}
但是,我看不出有任何方法可以增加此类解决方案中的计数器,因为它们取决于精确匹配....
所以我想知道这里是否有人知道更多 comprehensive/nice 解决这个问题的方法......
提前致谢 诺伯特
如何子类化 NSString,添加一个计数器来跟踪 match count
。
@interface PatternMatchingString : NSString
@property (readwrite) NSUInteger matchCount;
@end
-(void)patternMatching
{
for(PatternMatchingString *pattern in arrayOfPatterns)
{
if([file rangeOfString:pattern].location != NSNotFound)
pattern.matchCount++;
}
}