2010-06-27 39 views
2

我想从HTML像这部分的代码的所有CSS链接:问题使用RegexKitLite

<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

当正则表达式引擎具有特定含义时,反斜杠应该被转义;在你的情况下,正则表达式'@“href = \”。* \。css \“”'应该写成'@“href = \”。* \\。css \“”'。要检查如何在Objective-c中编写正则表达式,可以使用以下工具:http://regexkit.sourceforge.net/RegexKitLite/index.html#RegexEscapeTool。 – kiamlaluno 2010-06-27 01:11:11

+0

这是一个好点! – zsong 2010-06-27 04:18:43

回答

1

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

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

+0

如果你只想得到与组匹配的字符,你应该使用'arrayOfCaptureComponentsMatchedByRegex:'方法,而不是'componentsMatchedByRegex:'。 – kiamlaluno 2010-06-27 01:00:35