使用正则表达式检查字符串中的第三个字符

时间:2013-02-04 12:38:01

标签: regex cocoa ios5 nspredicate

我必须检查字符串中的第三个字符。我试图用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;
}

感谢

5 个答案:

答案 0 :(得分:1)

您缺少一个点 - 请使用..3.*。您可能还希望使用^..3.*$将其锚定到字符串的开头和结尾。

答案 1 :(得分:1)

..3*表示输入中任意位置的任意两个字符,后跟可选3。你想要^..3,这意味着任何两个字符后跟3,从行的开头开始。

答案 2 :(得分:1)

..3*

那个正则表达式不符合你的要求。

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

这个怎么样?

^..3.*$

答案 3 :(得分:1)

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

有关详细信息,请参阅Predicate Programming Guide (String Comparisons)

或者,使用NSRegularExpression

答案 4 :(得分:0)

您也可以考虑使用NSString方法subStringWithRange:代替? 如果您对正则表达式不满意,请不要急于使用正则表达式。使用有效的东西。 Cocoa的Regular Expression实现并不是最容易上手的事情。 抓住你的字符串,然后将它与任何东西进行比较。 你可以循环遍历字符串,以便轻松获得每个第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.
}

如果您想要更多关于正则表达式,请THE book。 3章将帮助您加快速度。首先使用Ruby,Python或Perl学习正则表达式。它会拯救你的大脑。