Шаблон NSRegularExpression для данных ICECAST

Я пытаюсь выделить данные ICECAST из аудиопотока, используя NSRegularExpression, но думаю, что у меня общая проблема с моим шаблоном.

Вот мой код:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"StreamTitle='(.*)';" 
                                                                       options:NSRegularExpressionCaseInsensitive 
                                                                         error:nil];

NSMutableString *messageAsText = [NSMutableString stringWithUTF8String:[messageAsRawData bytes]];
NSTextCheckingResult *match = [regex firstMatchInString:messageAsText 
                                                options:0
                                                  range:NSMakeRange(0, [messageAsText length])];
NSString *message = [messageAsText substringWithRange:[match rangeAtIndex:1]];
NSLog(@"Input: '%@', Output: '%@'", messageAsText, message);

Скажем, вход:

StreamTitle='Thomas Newman - Awkward Talk [The Horse Whisperer]';StreamUrl='';

Я ожидал бы получить это:

Thomas Newman - Awkward Talk [The Horse Whisperer]

но я получаю это:

Thomas Newman - Awkward Talk [The Horse Whisperer]';StreamUrl='

Это не связано с NSRegularExpression, потому что регулярное выражение показывает тот же результат при проверке здесь: http://regex.larsolavtorvik.com/

Может ли кто-нибудь указать мне правильное регулярное выражение?


person decades    schedule 13.04.2012    source источник
comment
Кстати: параметр ungreedy обеспечивает желаемое соответствие... Ищем параметр ungreedy в ios... Пример PHP: preg_match_all('/StreamTitle='(.*)';/iU', 'StreamTitle='Mychael and Jeff Danna - Большой зал в Камелоте';StreamUrl='';', $result);   -  person decades    schedule 14.04.2012
comment
ОК, быстрый поиск и самостоятельный ответ: небольшая кавычка делает трюк: Вместо @StreamTitle='(.*)'; Мне нужно использовать @StreamTitle='(.*?)'; Тема закрыта   -  person decades    schedule 14.04.2012
comment
Ты имеешь в виду маленький вопросительный знак?   -  person borrrden    schedule 14.04.2012


Ответы (1)


Попробуйте сделать квалификатор * ленивым, добавив после него ?, например:

StreamTitle='(.*?)'
person Robbie    schedule 13.04.2012