0

私がしたいのは、たとえば、最初の文字が R で 3 番目の文字が A の 8 文字の文字列を探すことですNSArrayNSStrings

SQLでは、次のようにします:

SELECT string FROM array WHERE string LIKE 'R*A*****';

しかし、Obj-C でこれを行うための最良の方法が何であるかはわかりません。もちろん、文字をチェックする関数を作成することもできますが、characterAtIndex:正規表現のように処理を進めるためのより高速な方法がいくつかあると確信しています。

ご協力いただきありがとうございます。

4

3 に答える 3

2

完全を期すために: SQL クエリに似たパターン マッチング アプローチは次のとおりです。

NSPredicate *predicate =
            [NSPredicate predicateWithFormat:@"SELF LIKE %@", @"R?A?????"];
NSArray *filtered = [array filteredArrayUsingPredicate:predicate];

しかし、簡単なテストでは、少なくともこの場合、カールの回答のようなブロックベースのフィルタリングがはるかに高速であることが示されました。

于 2013-10-18T05:18:55.083 に答える
1

characterAtIndex を使用するのが最も簡単な選択ですが、本当に正規表現パターン マッチングを使用したい場合は、おそらくこのパターンが役立ちます。

 for(int i=0;i<[array count];i++)       //'array' is the nsarray with collection of strings
{
    string = [array objectAtIndex:i];    //'string' takes each string from the array
    NSRegularExpression* reg=[NSRegularExpression regularExpressionWithPattern:@"R[a-zA-Z]{1}A[a-zA-Z]{5}" options:0 error:&error];

    NSTextCheckingResult *match=[reg firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];

    NSLog(@"result is %@",[string substringWithRange:[match rangeAtIndex:0]]);             


}

それが役に立てば幸い!!!

于 2013-10-18T05:35:29.833 に答える