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

标签 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 功能?这样的正则表达式会是什么样子?

最佳答案

您可以使用NSRegularExpression (尽管显然它不适用于 Snow Leo)或 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
}];

关于cocoa - 如何提取与模式匹配的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137572/

相关文章:

objective-c - 使用 NSTextField 创建标签是模糊的

objective-c - UIImage imageNamed 不显示带有 xcode 4.4 的图像

iphone - 查找字符串中字符的索引

objective-c - 关于编写 AppleScriptable Cocoa 项目的良好引用指南?

iphone - NSString "initWithBytesNoCopy:length:encoding:freeWhenDone:"可以修改输入 "bytes"吗?

macos - MonoMac 使用 "codesign"为 Mac Store 签名。 (无效的二进制文件)

java - 无法使用 Jenv 更改 Mac OS 中的 JDK

ios - IOS 8 如何在预定时间自动发送消息到手机号码

objective-c - NSData 到 NSString 与 åöä

objective-c - 当我禁用按钮时,有没有办法防止文本变成灰色?