0

文字列の 3 番目の文字を確認する必要があります。私はNSPredicateでそれをやろうとしています。正規表現は ..3* であるべきだと思ったので、3 番目の文字 3 を含むすべての文字列が検索されます。

チェックする簡単なコード

- (IBAction)btnCheckPerformClick:(id)sender {
_chkOk.state = NO;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@", _txtRegExpression.stringValue];
NSLog(@"%@", predicate);
if([predicate evaluateWithObject:_txtCheckingText.stringValue])
    _chkOk.state = YES;
}

ありがとう

4

5 に答える 5

1

..3*入力内の任意の 2 文字の後にオプションの 3 が続くことを意味します。が必要です^..3。これは、行頭から始まる任意の 2 文字の後に 3 が続くことを意味します。

于 2013-02-04T12:41:05.863 に答える
1
..3*

その正規表現は、あなたが望むことをしません。

任意の 2 文字、次に任意の数の 3 (3 がない場合を含む)

これはどう?

^..3.*$
于 2013-02-04T12:41:07.170 に答える
1

述語形式言語のLIKE演算子は、単純なワイルドカード (?および*) のみを理解します。MATCHES正規表現を使用する場合は、使用する必要があります。

詳細については、述語プログラミング ガイド (文字列比較)を参照してください。

または、 を使用しますNSRegularExpression

于 2013-02-04T12:46:07.523 に答える
1

もう 1 つドット使用がありません..3.*。を使用して文字列の先頭と末尾に固定することもできます^..3.*$

于 2013-02-04T12:40:50.937 に答える
0

代わりにNSStringメソッドを使用することも検討できますか? subStringWithRange:正規表現に慣れていない場合は、急いで使用しないでください。機能するものを使用してください。Cocoa の正規表現の実装は、始めるのが最も簡単なことではありません。文字列を取得して、それを何かと比較します。文字列をループして、3 文字ごとに簡単に取得できます。

NSString *aString = @"abc";
NSString *thirdCharacterOnly;
if (aString.length >= 3) {

    for (NSUInteger i = 2; i < aString.length; i += 3) {
        thirdCharacterOnly = [aString substringWithRange:NSMakeRange(2, 1)];
        if ([thirdCharacterOnly isEqualToString:@"3"]) {
                // Do something.
        }
    }

} else {
        // do something different.
}

正規表現について詳しく知りたい場合は、を入手してください。3章ですぐに理解できます。まず、Ruby、Python、または Perl で正規表現を学びます。それはあなたの脳を救います。

于 2013-02-04T13:38:16.800 に答える