NSString *yourString = @"/Users/user/Downloads/data(1).txt.download/data(1).txt";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"/Users/user/Downloads/data(1).txt-*\\d*.download"
options:NSRegularExpressionCaseInsensitive
error:&error];
[regex enumerateMatchesInString:yourString options:0 range:NSMakeRange(0, [yourString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
// your code to handle matches here
NSLog(@"%@ %ld",match,flags);
}];
请参阅上面的代码,如果文件名中有特殊字符"("
,则无法匹配,因为regularExpression应使用"\\("
,我可以使用@"/Users/user/Downloads/data\\(1\\).txt-*\\d*.download"
来匹配,但文件名何时包含其他特殊字符呢。有没有办法以常见的方式处理这种情况?
参数regularExpressionWithPattern
应该是[NSString stringWithFormat:xxx]
答案 0 :(得分:0)
有没有办法以常见的方式处理这种情况?
为什么不用正则表达式(RE)解决问题?即在使用您希望按原样匹配的字符串作为模式的一部分之前,将RE应用于匹配任何RE元字符的字符串并添加所需的转义。
E.g。模式[()]
将匹配开括号或近似括号,您可以将任何匹配替换为\\
后跟其自身。
HTH