我今天正在修改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;
}
然而,似乎永远不会发生更换;运行此日志“a b c \ nd e”到日志内容。 (我期待看到“abcde”。)我尝试了更简单的模式,如/[aeiou]/
甚至只是/a/
,但无论我尝试什么,stringByReplacingMatchesInString方法似乎并没有真正替换任何东西。我在俯瞰什么?
答案 0 :(得分:2)
您需要删除图案两侧的斜线。斜杠不是cocoa正则表达式中的元字符,因此当前表达式匹配的字符串将是单个字母,两边都有斜杠 - /a/
,/b/
,/c/
,等等。 / p>
您还可以在角色类中使用范围,如下所示:
NSRegularExpression *pattern = [[NSRegularExpression alloc] initWithPattern:@"[^a-z]" options:0 error:&error];