Regexkit lite和iPhone解析

时间:2009-07-08 19:24:35

标签: iphone objective-c regex parsing

我已经接受了一些帖子的建议,这些帖子推荐regexkit lite,我遇到的问题是尝试从字符串中提取特定的URL。问题是我对使用它的语法非常迷茫,并希望有人使用它可以帮助我。

我正在尝试解析的字符串看起来像这样:

<a> blah blah blah <img src="http://www.something.com/1234.jpg">

我想要提取的只是1234.它将在“/”之后和“.jpg”之前

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你试图解析任何看起来像/1234.jpg的字符串,那么正则表达式是一个很好的方法。如果您需要仅在img标记中使用的字符串,请使用HTML解析器,而不是正则表达式。

如果是第一种情况,则此表达式将匹配“/1234.jpg”。您可以轻松摆脱/.jpg部分。

(/.+?\\.jpg)

表达式显示“查找以/开头的任何字符串,以.jpg结尾并包含其中的任何内容。”

使用前瞻和后视,这个只匹配“1234”:

(?<=/).+?(?=\\.jpg)

此表达式显示“查看/后面的内容,匹配任何内容,直到下一个.jpg。”

答案 1 :(得分:1)

这是您应该能够适应的配方,来自RegexKitLite的文档:

NSString *searchString =@"http://johndoe:secret@www.example.com:8080/private/mail/index.html";
NSString *regexString  = @"\\b(https?)://(?:(\\S+?)(?::(\\S+?))?@)?([a-zA-Z0-9\\-.]+)(?::(\\d+))?((?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?";

if([searchString isMatchedByRegex:regexString]) {
  NSString *protocolString = [searchString stringByMatching:regexString capture:1L];
  NSString *userString     = [searchString stringByMatching:regexString capture:2L];
  NSString *passwordString = [searchString stringByMatching:regexString capture:3L];
  NSString *hostString     = [searchString stringByMatching:regexString capture:4L];
  NSString *portString     = [searchString stringByMatching:regexString capture:5L];
  NSString *pathString     = [searchString stringByMatching:regexString capture:6L];

  NSMutableDictionary *urlDictionary = [NSMutableDictionary dictionary];

  if(protocolString) { [urlDictionary setObject:protocolString forKey:@"protocol"]; }
  if(userString)     { [urlDictionary setObject:userString     forKey:@"user"];     }
  if(passwordString) { [urlDictionary setObject:passwordString forKey:@"password"]; }
  if(hostString)     { [urlDictionary setObject:hostString     forKey:@"host"];     }
  if(portString)     { [urlDictionary setObject:portString     forKey:@"port"];     }
  if(pathString)     { [urlDictionary setObject:pathString     forKey:@"path"];     }

  NSLog(@"urlDictionary: %@", urlDictionary);
}