我必须检查字符串中的第三个字符。我试图用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;
}
感谢
答案 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学习正则表达式。它会拯救你的大脑。