在Objective C中相当于Java的Matcher.lookingAt()

时间:2012-04-15 11:24:36

标签: java objective-c

我正在将一个从Java迁移到Objective C的框架,它主要依赖于正则表达式。遗憾的是,Java正则表达式API与Objective C API有很大不同。

我正在尝试使用 NSRegularExpression 类来评估正则表达式。在Java中,这是完全不同的:你必须使用Pattern和Matcher类。

有些东西我无法弄清楚(除其他外)。 Objective C中Matcher.lookingAt()的等价物是什么?把它放在代码中。以下代码的Objective C翻译是什么?

Pattern pattern = Pattern.compile("[aZ]");
boolean lookingAt = pattern.matcher("abc").lookingAt();

感谢所有知道的人! (顺便说一句,上面的例子为lookingAt布尔值赋予了真值)

2 个答案:

答案 0 :(得分:4)

我明白了!这是与Java代码等效的NSRegularExpression:

NSError *error = nil;
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"[aZ]" options:0 error:&error];
if (error) {
    // Do something when an error occurs
}
NSString *candidate = @"abc";
BOOL lookingAt = [expression numberOfMatchesInString:candidate options:NSMatchingAnchored range:NSMakeRange(0, candidate.length)] > 0;

执行表达式时,重点在于 NSMatchingAnchored 选项!文档说:

  

NSMatchingAnchored 指定匹配仅限于   搜索范围的开始。看到   enumerateMatchesInString:options:range:usingBlock:用于描述   在上下文中的常量。

这正是我所寻找的!

答案 1 :(得分:3)

您可以执行类似

的操作
NSString *regex = @"ObjC";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", regex]; 

if( [predicate evaluateWithObject:myString]) 
    NSLog(@"matches");
else
    NSLog(@"does not match");

请查看Predicate Format String Syntax指南以了解更多选项。