2

我正在将一个框架从 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();

感谢知道的人!(顺便说一句,上面的示例将 true 分配给 lookingAt 布尔值)

4

2 回答 2

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:。

这正是我一直在寻找的!

于 2012-04-15T14:07:32.633 回答
3

你可以做类似的事情

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

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

查看谓词格式字符串语法指南以获取更多选项。

于 2012-04-15T11:33:03.207 回答