我一直在努力使用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中正常工作。
有点丢失。
提前致谢。
答案 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约定,尽管这显然不会破坏您的代码。)