关于使用RegexKitLite进行正则表达式评估的问题

时间:2010-06-27 00:36:58

标签: iphone objective-c regex

我试图从html中获取所有css链接,例如这段代码:

<link href="http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/default.css" rel="stylesheet" type="text/css" />
<link type="text/css" rel="stylesheet" href="http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/datepicker.css"/>
<link href="http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/carousel.css" rel="stylesheet" type="text/css" />
<link href="http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/langoverlay_en-us.css" rel="stylesheet" type="text/css" />

这是我的代码:

-(void)matchCSS:(NSString *)html{
    NSString *regexString = @"href=\".*\.css\"";
    NSArray *matchArray = NULL;
    matchArray = [html componentsMatchedByRegex:regexString];
    NSLog(@"matchArray: %@", matchArray);
}

然而,我得到的有点疯狂:

"href=\"http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/default.css\" rel=\"stylesheet\" type=\"text/css\"",
"href=\"http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/datepicker.css\"",
"href=\"http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/carousel.css\" rel=\"stylesheet\" type=\"text/css\"",
"href=\"http://media.ticketmaster.com/en-us/css/1c84b57773d8f594407f0b0b78d67aba/tm/langoverlay_en-us.css\" rel=\"stylesheet\" type=\"text/css\""

这些不是纯粹的链接,其中一些包含一些我不想要的标签。我没有看到我的RE有什么问题。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题在于.*,这太贪婪了。 您应该匹配不是引用字符的每个字符。我不熟悉RegexKitLite使用的正则表达式语法,但我认为正则表达式应该类似于@"href=\"[^\"]*\\.css\""

你应该使用一个小组;这样,该函数只返回组中包含的字符,而不是所有与正则表达式匹配的字符。如果我没有错,那么正则表达式应该类似@"href=\"([^\"]*\\.css)\"",在这种情况下。