24

次のような NSPredicate があります。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];

ただし、その文字列を含むものはすべて返されます。例: 私の entity.name の場合:

text
texttwo
textthree
randomtext

そして、これらmyStringtextすべての文字列が一致します。is の場合は名前の最初のオブジェクトのみを返し、myStringis の場合は名前の4 番目のオブジェクトを返すようにしたいと思います。また、大文字と小文字を区別せず、空白を無視することも探していますtexttextmyStringrandomtextrandomtext

4

2 に答える 2

64

これはそれを行う必要があります:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString];

LIKE文字列を?および*ワイルドカードとして。は[c]、比較で大文字と小文字を区別しないようにする必要があることを示しています。

欲しくないなら?==および*ワイルドカードとして扱われるために、次の代わりに使用できますLIKE

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString];

詳細については、NSPredicate Predicate FormatStringSyntaxのドキュメントを参照してください。

于 2012-07-22T03:17:20.493 に答える
13

次のように、述語で正規表現マッチャーを使用できます。

NSString *str = @"test";
NSMutableString *arg = [NSMutableString string];
[arg appendString:@"\\s*\\b"];
[arg appendString:str];
[arg appendString:@"\\b\\s*"];
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF matches[c] %@", arg];
NSArray *a = [NSArray arrayWithObjects:@" test ", @"test", @"Test", @"TEST", nil];
NSArray *b = [a filteredArrayUsingPredicate:p];

上記のコードは、「単語境界」マーカーで囲まれたターゲット単語を使用して、先頭および/または末尾にオプションの空白がある文字列に一致する正規表現を構築します\b[c]aftermatchesは「大文字と小文字を区別せずに一致する」ことを意味します。

この例では、文字列の配列を使用しています。お使いの環境で機能させるには、 に置き換えSELFますentity.name

于 2012-07-22T03:29:05.750 に答える