Вопрос об оценке регулярного выражения с использованием RegexKitLite - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь получить все ссылки CSS из HTML, как этот сегмент кода:

<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.Любое предложение 101

1 Ответ

1 голос
/ 27 июня 2010

Проблема с .*, который слишком жадный. Вы должны соответствовать каждому символу, который не является символом кавычки. Я не знаком с синтаксисом регулярного выражения, используемым RegexKitLite, но я думаю, что регулярное выражение должно быть чем-то вроде @"href=\"[^\"]*\\.css\"".

Вы, вероятно, должны использовать группу; таким образом, функция вернет вам только символы, включенные в группу, а не все символы, соответствующие регулярному выражению. Если я не ошибаюсь, регулярное выражение должно быть что-то вроде @"href=\"([^\"]*\\.css)\"", в данном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...