【问题标题】:Get Vimeo clip_id from url with regex in objective C在目标 C 中使用正则表达式从 url 获取 Vimeo clip_id
【发布时间】:2012-08-20 18:27:20
【问题描述】:

谁能告诉我如何使用 Obj C 正则表达式从 Vimeo url 中提取 clip_id?

http://vimeo.com/moogaloop.swf?clip_id=12050952&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=56872c&fullscreen=1

我要提取12050952。

谢谢。

【问题讨论】:

    标签: objective-c ios regex vimeo


    【解决方案1】:

    我正在使用实用程序类 URLParser,它简单明了。

    URLParser *parser = [[[URLParser alloc] initWithURLString:url] autorelease];
    NSString *videoId = [parser valueForVariable:@"clip_id"];  
    

    这里是 URLParser 类

    #import <Foundation/Foundation.h>
    
    @interface URLParser : NSObject {
        NSArray *variables;
    }
    
    @property (nonatomic, retain) NSArray *variables;
    
    - (id)initWithURLString:(NSString *)url;
    - (NSString *)valueForVariable:(NSString *)varName;
    
    @end
    
        @implementation URLParser
    @synthesize variables;
    
    - (id) initWithURLString:(NSString *)url{
        self = [super init];
        if (self != nil) {
            NSString *string = url;
            NSScanner *scanner = [NSScanner scannerWithString:string];
            [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"&?"]];
            NSString *tempString;
            NSMutableArray *vars = [NSMutableArray new];
            [scanner scanUpToString:@"?" intoString:nil];       //ignore the beginning of the string and skip to the vars
            while ([scanner scanUpToString:@"&" intoString:&tempString]) {
                [vars addObject:[tempString copy]];
            }
            self.variables = vars;
            [vars release];
        }
        return self;
    }
    
    - (NSString *)valueForVariable:(NSString *)varName {
        for (NSString *var in self.variables) {
            if ([var length] > [varName length]+1 && [[var substringWithRange:NSMakeRange(0, [varName length]+1)] isEqualToString:[varName stringByAppendingString:@"="]]) {
                NSString *varValue = [var substringFromIndex:[varName length]+1];
                return varValue;
            }
        }
        return nil;
    }
    
    - (void) dealloc{
        self.variables = nil;
        [super dealloc];
    }
    
    @end
    

    【讨论】:

      【解决方案2】:

      你可以用这个模式来做:

      (?<=clip_id=)\d+
      

      它正在使用积极的后视。

      演示:example

      【讨论】:

      • 必须像这样添加一个额外的转义字符:NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?&lt;=clip_id=)\\d+" options:NSRegularExpressionCaseInsensitive error:&amp;error]; 但它就像一个魅力。谢谢
      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多