Iphone NSRegularExpression和preg之间的差异

Iphone NSRegularExpression和preg之间的差异,iphone,objective-c,regex,nsstring,nsregularexpression,Iphone,Objective C,Regex,Nsstring,Nsregularexpression,我一直在努力使用NSRegularExpression,与我不知道的Regex有什么主要区别吗 我正在尝试: NSString *str = @"&url=http%3A%2F%2Fi.hello.com/random/depeth/in/string.JPG%3Fset_id" NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression

我一直在努力使用NSRegularExpression,与我不知道的Regex有什么主要区别吗

我正在尝试:

NSString *str = @"&url=http%3A%2F%2Fi.hello.com/random/depeth/in/string.JPG%3Fset_id"

NSError *error = NULL;

NSRegularExpression *regex = [NSRegularExpression 
                              regularExpressionWithPattern:@"i(.+?)%3Fset_id" 
                              options:NSRegularExpressionCaseInsensitive 
                              error:&error];

NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:str 
                             options:0 range:NSMakeRange(0, [str length])];
我希望rangeOfFirstMatch的范围为.hello.com/random/depeth/in/string.JPG

regex“i(+?)%3Fset_id”在preg中似乎运行良好

有点迷路了


提前感谢。

rangeOfFirstMatchInString:…
没有达到预期效果:它会在整个正则表达式的字符串中找到第一个匹配项。您想要的是:

NSTextCheckingResult *result = [regex firstMatchInString:Str options:0 range:NSMakeRange(0, [Str length])];
NSRange rangeOfFirstSubexpression = [result rangeAtIndex:1];
NSString *firstSubexpression = [Str substringWithRange:rangeOfFirstSubexpression];

(还要注意,将非全局非常量大写不是Cocoa惯例,尽管这显然不会破坏您的代码。)

谢谢,我将对此进行测试。我知道我使用Str是因为我刚刚拼凑了一些代码,并且在声明时错误地将其大写。谢谢,这非常有效。下次我会更仔细地阅读文档,不用担心。很高兴我能帮忙!