我采纳了这里推荐regexkit lite的一些帖子的建议,因为我在尝试从字符串中提取特定URL时遇到了问题。问题是,我对使用它的语法非常迷惑,并希望使用过它的人能帮我一把。
我试图解析的字符串看起来像这样:
<a> blah blah blah <img src="http://www.something.com/1234.jpg">我只想提取1234。应该在"/“之后,在".jpg”之前
我该怎么做呢?
谢谢!
发布于 2009-07-08 19:30:59
如果您正在尝试解析任何看起来像/1234.jpg的字符串,那么正则表达式是一个很好的选择。如果仅在img 标记中需要看起来像HTML字符串,则使用解析器,而不是正则表达式。
如果是第一种情况,则此表达式将匹配"/1234.jpg“。您可以很容易地摆脱/和.jpg部件。
(/.+?\\.jpg)该表达式表示“查找以/开头、以.jpg结尾并包含介于两者之间的任何内容的字符串”。
使用look-aheads和look-behinds,这个只匹配"1234":
(?<=/).+?(?=\\.jpg)这个表达式写着“寻找/,匹配任何东西,直到.jpg是下一个。”
发布于 2009-07-08 19:30:52
以下是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);
}https://stackoverflow.com/questions/1100063
复制相似问题