[英]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
返回NSArray
的NSTextCheckingResult
对象,而不是 NSRange
S,所以这也难怪,你不能直接把他们救出来。
另外(你应该记住未来,因为它是一个重要的区别), NSRange
是一个C struct
,而不是一个Objective-C对象。 这意味着它不能直接存储在NSArray
或其他Objective-C对象容器中。 NSArray
, NSDictionary
和其他用于存储对象的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.