相当于Java';目标C中的s Matcher.lookingAt()

相当于Java';目标C中的s Matcher.lookingAt(),java,objective-c,Java,Objective C,我正在将一个框架从Java移植到Objective C,它严重依赖正则表达式。不幸的是,Java正则表达式API与Objective C API有很大不同 我试图使用NSRegularExpression类来计算正则表达式。在Java中,这是完全不同的:必须使用模式和匹配器类 有件事我搞不懂(除其他外)。目标C中Matcher.lookingAt()的等价物是什么?把它写成代码。以下代码的目标C翻译是什么 Pattern pattern = Pattern.compile("[aZ]"); bo

我正在将一个框架从Java移植到Objective C,它严重依赖正则表达式。不幸的是,Java正则表达式API与Objective C API有很大不同

我试图使用NSRegularExpression类来计算正则表达式。在Java中,这是完全不同的:必须使用模式和匹配器类

有件事我搞不懂(除其他外)。目标C中Matcher.lookingAt()的等价物是什么?把它写成代码。以下代码的目标C翻译是什么

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

感谢所有知道的人!(顺便说一句,上面的示例为lookingAt boolean赋值为true)

您可以执行以下操作

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

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

查看指南以了解更多选项。

我找到了!这是相当于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指定匹配仅限于当前位置的匹配 搜索范围的开始。看见 枚举匹配安装:选项:范围:使用块:用于描述 上下文中的常量


那正是我要找的

从我阅读的Java文档中,lookingAt()进行前缀匹配。如果这是您想要的,那么只需使用NSString的hasPrefix:方法。感谢您的回复!如果我只想将一个字符串的前缀与另一个文本字符串匹配,“hasPrefix”方法就可以了。但在我的问题中,我把“ObjC”放在了这里,我希望它也能与一个随机正则表达式一起工作。我认为“hasPrefix”不支持正则表达式。谢谢!但不幸的是,这并不是我想要的。首先,您的示例等效于Matcher.matches()方法,而不是Matcher.lookingAt()。其次,我非常喜欢使用NSRegularExpression,因为这是在Objective C中处理正则表达式的首选方法。哦,是的,对不起。您可以使用
SELF BEGINSWITH%@
而不是
SELF CONTAINS%@
。作为另一种选择,如果您需要使用<代码> NStReReasXPress < /代码>,您可以考虑使用诸如<代码> -RangeOfFrimthMatcSnc:选项:范围:,并检查返回的范围是否从0开始。实际上,我认为在Objy-C中没有任何与正则表达式一起工作的“首选方式”。不要被类名所欺骗,这两种方法都有效,但我发现NSPredicate更容易“阅读”。还有更多的在线资源可供NSPredicate使用,因此我只想尝试一下NSPredicate,如果不行,请返回NSRegularExpressions。谢谢!我使用NSRegularExpressions解决了这个问题!我将很快发布答案。