如何转移不确定的字符,如"("在正则表达式?

时间:2016-08-17 09:27:02

标签: objective-c regex

 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]

的变量

1 个答案:

答案 0 :(得分:0)

  

有没有办法以常见的方式处理这种情况?

为什么不用正则表达式(RE)解决问题?即在使用您希望按原样匹配的字符串作为模式的一部分之前,将RE应用于匹配任何RE元字符的字符串并添加所需的转义。

E.g。模式[()]将匹配开括号或近似括号,您可以将任何匹配替换为\\后跟其自身。

HTH