相当于Java';目标C中的s Matcher.lookingAt()
我正在将一个框架从Java移植到Objective C,它严重依赖正则表达式。不幸的是,Java正则表达式API与Objective C API有很大不同 我试图使用NSRegularExpression类来计算正则表达式。在Java中,这是完全不同的:必须使用模式和匹配器类 有件事我搞不懂(除其他外)。目标C中Matcher.lookingAt()的等价物是什么?把它写成代码。以下代码的目标C翻译是什么相当于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
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解决了这个问题!我将很快发布答案。