0

我必须检查字符串中的第三个字符。我正在尝试使用 NSPredicate 来做到这一点。我认为正则表达式应该是 ..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

你又少了一个 dot-use ..3.*。您可能还想使用 . 将其锚定到字符串的开头和结尾^..3.*$

于 2013-02-04T12:40:50.937 回答
1

..3*表示任何两个字符后跟一个可选的 3,在您输入的任何位置。You want ^..3,这意味着任何两个字符后跟 3,从行首开始。

于 2013-02-04T12:41:05.863 回答
1
..3*

该正则表达式不能满足您的要求。

它说,任意两个字符,然后是任意数量的 3(包括没有 3)

这个怎么样?

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

谓词格式语言中的LIKE运算符只理解简单的通配符(?*)。如果要MATCHES使用正则表达式,则需要使用。

有关更多详细信息,请参阅谓词编程指南(字符串比较)

或者,使用NSRegularExpression.

于 2013-02-04T12:46:07.523 回答
0

您可能还考虑使用NSString方法subStringWithRange:代替?如果您对正则表达式不满意,请不要急于使用它。使用有效的东西。Cocoa 的正则表达式实现并不是最容易上手的。抓住你的字符串,然后将它与任何东西进行比较。您可以遍历字符串以轻松获取每个第三个字符。

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 回答