【问题标题】:Difference between NSRegularExpression and pregNSRegularExpression 和 preg 的区别
【发布时间】:2012-01-06 11:55:19
【问题描述】:

我一直在努力使用 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 中工作正常。

有点失落。

提前致谢。

【问题讨论】:

    标签: iphone objective-c regex nsstring nsregularexpression


    【解决方案1】:

    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 是因为我只是将一些代码放在一起并在声明时错误地将其大写。
    • 感谢这工作完美。下次我会更仔细地阅读文档。
    • 不用担心。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2012-03-01
    • 2013-08-07
    相关资源
    最近更新 更多