2

我今天正在修补 Objective-C,但我遇到了一些奇怪的行为。基本上我试图从 NSString 替换所有非字母小写字符。我基本上归结为:

int main(int argc, const char * argv[])
{

  @autoreleasepool {
    NSError *error;
    NSRegularExpression *pattern = [[NSRegularExpression alloc] initWithPattern:@"/[^abcdefghijklmnopqrstuvwxyz]/" options:0 error:&error];
    NSString *replacableStuff = @"a b c\nd e";
    NSLog(@"%@", [pattern stringByReplacingMatchesInString:replacableStuff options:0 range:NSMakeRange(0, [replacableStuff length]) withTemplate:@""]);

  }
    return 0;
}

但是,替换似乎从未发生过;运行此日志“abc\nd e”到日志事物。(我期待看到“abcde”。)我尝试了更简单的模式,例如/[aeiou]/,甚至只是/a/,但无论我尝试什么,stringByReplacingMatchesInString 方法似乎实际上并没有替换任何东西。我在看什么?

4

1 回答 1

2

您需要删除图案两侧的斜线。斜杠不是 cocoa 正则表达式中的元字符,因此与当前表达式匹配的字符串将是单个字母,两边都带有斜杠 - /a//b//c/等。

您还可以在角色类中使用范围,如下所示:

NSRegularExpression *pattern = [[NSRegularExpression alloc] initWithPattern:@"[^a-z]" options:0 error:&error];
于 2012-07-07T11:13:00.253 回答