Как извлечь определенный контент из NSString - PullRequest
0 голосов
/ 12 марта 2012

У меня есть NSString, как это:

<param name=\"movie\" value=\"system/swf/miniplayer.swf\"> 
param name=\"FlashVars\"
value=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3\"   
<param name=\"quality\" value=\"high\"  
<param name=\"menu\" value=\"false\" 
<param name=\"wmode\" value=\"transparent\"
<embed src=\"system/swf/miniplayer.swf\" width=\"180\" height=\"30\" 
flashvars=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3\ 
quality=\"high\" menu=\"false\" wmode=\"transparent\"                          ",

Как извлечь аудио / программыAudios / f37070041634e8d19316422e3ffad4c9.mp3 ?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Ваши данные выглядят неправильно, если предположить, что они представляют собой некоторую строку XML. Предполагая, что это является XML и что каждый «param» правильно заканчивается на >, вы можете использовать регулярные выражения для анализа необходимой информации. Ниже приведен псевдокод, вы можете адаптировать его под свои нужды. Обратите внимание, что в этом примере предполагается, что во входной строке может быть несколько soundFile разделов.

NSString *data = @"param name=\"FlashVars\" value=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3>\"";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression         
                                regularExpressionWithPattern:@"(soundFile=)(.+)(>)"
                                options:NSRegularExpressionCaseInsensitive
                                error:&error];
if(error == NULL) {
    NSLog(@"Number of capture groups: %lu\n", [regex numberOfCaptureGroups]);

    NSArray *matches = [regex matchesInString:data options:0 range:NSMakeRange(0, [data length])];
    for (NSTextCheckingResult *match in matches) {
        NSRange rangeOfInterest = [match rangeAtIndex:2];
        NSLog(@"Sound file: %@\n", [data substringWithRange: rangeOfInterest]);
    }
} else {
    // handle error
}

Подробнее о поддержке регулярных выражений в Cocoa можно прочитать на странице документации . Также обратите внимание, что для извлечения этой информации может быть более уместно использовать синтаксический анализатор XML и запросы XPath, но в этом случае регулярные выражения отлично справятся со своей задачей.

0 голосов
/ 12 марта 2012
NSArray *names = [nameString componentsSeparatedByString:@"soundFile="];

в секунде * указатель имен * будет вашим путем, но вам нужно вырезать другую часть быстрый способ заключается в том, что

NSArray *path = [nameString componentsSeparatedByString:@"\"];

при первый индекс пути ваш ответ

Не идеальный пример кодирования, но он работает:)

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