我已经接受了一些帖子的建议,这些帖子推荐regexkit lite,我遇到的问题是尝试从字符串中提取特定的URL。问题是我对使用它的语法非常迷茫,并希望有人使用它可以帮助我。
我正在尝试解析的字符串看起来像这样:
<a> blah blah blah <img src="http://www.something.com/1234.jpg">
我想要提取的只是1234.它将在“/”之后和“.jpg”之前
我该怎么做?
谢谢!
答案 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);
}