NSRegularExpression和preg之间的区别

时间:2011-11-25 16:30:11

标签: 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 
                              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的范围

正则表达式“我(。+?)%3Fset_id”似乎在preg中正常工作。

有点丢失。

提前致谢。

1 个答案:

答案 0 :(得分:2)

rangeOfFirstMatchInString:…没有做你期望的事情:它在整个正则表达式的字符串中找到第一个匹配项。你想要的是:

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

(另请注意,大写非全局非常量不是Cocoa约定,尽管这显然不会破坏您的代码。)