我正在将一个从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布尔值赋予了真值)
答案 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指南以了解更多选项。