【问题标题】:NSRegularExpression pattern for ICECAST dataICECAST 数据的 NSRegularExpression 模式
【发布时间】:2017-03-19 14:26:25
【问题描述】:

我正在尝试使用 NSRegularExpression 从音频流中提取 ICECAST 数据,但我认为我的模式存在一般问题。

这是我的代码:

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/

谁能指出正确的正则表达式?

【问题讨论】:

  • 顺便说一句:“不贪婪”选项强制执行所需的匹配...在 ios 中寻找不贪婪的选项... PHP 示例:preg_match_all('/StreamTitle='(.*)';/iU ', 'StreamTitle='Mychael and Jeff Danna - The Great Hall At Camelot';StreamUrl='';', $result);
  • 好的,快速查找和自我回答:一个小引号就可以了:而不是@"StreamTitle='(.*)';"我需要使用 @"StreamTitle='(.*?)';"话题结束
  • 你的意思是一个小问号?

标签: ios regex regex-group


【解决方案1】:

尝试使* 限定符变得懒惰,如下所示使用?

StreamTitle='(.*?)'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2015-01-11
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多