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 \nde」がログに記録されます。(「abcde」が表示されることを期待していました。)のような単純なパターン/[aeiou]//a/試しましたが、何を試しても、stringByReplacingMatchesInStringメソッドは実際には何も置き換えていないようです。私は何を見落としていますか?

4

1 に答える 1

2

パターンの両側のスラッシュを削除する必要があります。スラッシュはcocoaの正規表現のメタ文字ではないため、現在の式に一致する文字列は、両側にスラッシュが付いた1文字になります(、、、/a/など)。/b//c/

次のように、キャラクタークラスで範囲を使用することもできます。

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