使用正则表达式检查字符串中的第三个字符
Posted
技术标签:
【中文标题】使用正则表达式检查字符串中的第三个字符【英文标题】:Checking third character in string using regex 【发布时间】:2013-02-04 12:38:01 【问题描述】:我必须检查字符串中的第三个字符。我正在尝试使用 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;
谢谢
【问题讨论】:
【参考方案1】:谓词格式语言中的LIKE
运算符只能理解简单的通配符(?
和*
)。如果要使用正则表达式,则需要使用MATCHES
。
有关详细信息,请参阅Predicate Programming Guide (String Comparisons)。
或者,使用NSRegularExpression
。
【讨论】:
很好,它与..3.*
合作。我也在尝试这个,但只是使用..3*
如果您只使用..3
作为您的正则表达式,它将匹配 blahblah3blah。确保按照我的回答锚定它。
不是真的。 ..3
将仅匹配 aa3
而不是 aa3a
或 aaaaa3aa
。【参考方案2】:
你又少了一个点 - 使用..3.*
。您可能还想使用^..3.*$
将其锚定到字符串的开头和结尾。
【讨论】:
您不需要该正则表达式末尾的.*$
,它对此用例没有任何作用。
可能不会,但在处理多行输入时可能会有所不同。
Predicate:SELF LIKE[c] "^..3.*$" SearchingText:aa3aaa
一样,不行。【参考方案3】:
..3*
表示输入中任意两个字符后跟可选的 3。你想要^..3
,这意味着任何两个字符后跟3,从行首开始。
【讨论】:
Predicate:SELF LIKE[c] "^..3" SearchingText:aa3aaa
不起作用
正如@omz 所指出的,您需要对正则表达式使用 MATCHES 而不是 LIKE。【参考方案4】:
..3*
那个正则表达式不符合你的要求。
它说,任意两个字符,然后是任意数量的 3(包括没有 3)
这个怎么样?
^..3.*$
【讨论】:
【参考方案5】:您还可以考虑使用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.
如果您想了解更多关于正则表达式的信息,请获取THE book。 3章让你快速上手。首先使用 Ruby、Python 或 Perl 学习正则表达式。它会拯救你的大脑。
【讨论】:
以上是关于使用正则表达式检查字符串中的第三个字符的主要内容,如果未能解决你的问题,请参考以下文章