从NSRegularExpression匹配中获取NSRange

Kir*_*ari 3 iphone objective-c ios nsrange

我有一个包含NSRange元素的数组.

现在我可以使用数组的最后一个范围元素[resultArray lastObject].

当我访问最后一个元素时,它返回一些未知对象.(这意味着未知类)

现在我想将对象转换为NSRange.怎么做?

我的代码是:

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:paraStartRegEx options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:content options:0 range:NSMakeRange(0, [content length])];
NSObject *obj =  [matches lastObject];
Run Code Online (Sandbox Code Playgroud)

如何将此对象转换为NSRange

Gre*_*reg 5

如果您已经阅读文档,你会注意到,该matchesInString:options:range:方法NSRegularExpression返回一个NSArrayNSTextCheckingResult对象,不是 NSRange S,所以这也难怪,你不能直接把他们救出来.

另外(你应该记住这个将来,因为这是一个重要的区别),NSRange是一个Cstruct,而不是一个Objective-C对象.这意味着它不能直接存储在NSArrays或其他Objective-C对象容器中. NSArray,NSDictionary和其他用于存储对象的Objective-C类只能存储Objective-C类型的对象,即作为a的实例的对象,Class并且可以将消息发送给它们[object method].

现在回到你的问题,你得到的数组matchesInString:options:range:包含NSTextCheckingResult对象,这些对象包含的信息不仅仅是匹配的范围,所以你不能只将它们转换为NSRange; 您需要访问range对象的属性才能获得所需内容:

NSTextCheckingResult *result = [matches lastObject];
NSRange range = [result range];
Run Code Online (Sandbox Code Playgroud)