如何提取与模式匹配的子字符串?

时间:2011-08-21 09:58:17

标签: cocoa macos nsstring osx-snow-leopard

我必须解析大的html文本文件并提取与某个模式匹配的子字符串。例如:

<span id='report-9429'>Report for May 2009</span>
A lot of code and text.
<span id='report-10522'>Report for Apr 2009</span>
A lot of code and text.
<span id='report-15212'>Report for Apr 2009</span>

其中9429,10522和15212是我必须作为子串数组得到的部分。该文件包含许多这些,我需要获取所有这些。

Cocoa中是否存在某种RegExp功能?这样的RegExp会是什么样的?

1 个答案:

答案 0 :(得分:3)

您可以使用NSRegularExpression(虽然显然它不适用于雪狮)或RegexKit

您的正则表达式可能如下所示:

<span id='report-(\d+)'>Report for \w+ \d+</span>

对于NSRegularExpression,代码可能如下所示:

NSString *pattern = @"<span id='report-(\d+)'>Report for \w+ \d+</span>";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                       options:0
                                                                         error:nil];
[regex enumerateMatchesInString:string
                        options:0
                          range:NSMakeRange(0, [string length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    NSString *reportId = [string substringWithRange:[result rangeAtIndex:1]];
    // Do something with reportId
}];