繁体   English   中英

从NSRegularExpression匹配中获取NSRange

[英]Get NSRange from NSRegularExpression match

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

现在我可以使用[resultArray lastObject]获取数组的最后一个range元素。

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

现在我想将对象转换为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];

如何将此对象转换为NSRange

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

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

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

NSTextCheckingResult *result = [matches lastObject];
NSRange range = [result range];

NSRange是一个C结构。

NSArray不包含C类型,只包含对象。

NSRegularExpression返回包含NSTextCheckingResult类型对象的匹配NSArray

NSTextCheckingResult有一个范围属性,可返回匹配范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM