You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:从NSString提取<caption>标签内以©开头的字符串

在iOS中提取NSString里标签内以©开头的内容

嘿,刚好帮你解决这个iOS字符串提取的需求!要从NSString里精准抓出<caption>标签内以©开头、到</caption>结束前的内容,还得忽略标签外的©?用正则表达式就可以完美搞定,下面给你具体的实现方案:

核心思路

我们需要构建一个匹配规则,精准锁定目标内容:

  • 先定位到<caption>起始标签
  • 紧接着匹配以©开头的任意字符(用非贪婪匹配避免跨标签匹配)
  • 最后用捕获组提取出©到</caption>之间的核心内容,排除标签本身

代码实现

// 替换成你的原始NSString内容
NSString *inputString = @"示例内容:<caption>© Dimitrios Ourdoulidis</caption> 这里是标签外的©无关内容 <caption>© Dig Athens</caption> 更多无关内容";

// 正则表达式模式:匹配<caption>内以©开头的内容
NSString *pattern = @"<caption>(©.*?)</caption>";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                       options:0
                                                                         error:&error];

if (error) {
    NSLog(@"正则表达式创建失败:%@", error.localizedDescription);
    return;
}

NSArray *matches = [regex matchesInString:inputString
                                  options:0
                                    range:NSMakeRange(0, inputString.length)];

// 存储提取到的结果
NSMutableArray *targetContents = [NSMutableArray array];
for (NSTextCheckingResult *match in matches) {
    // 第一个捕获组(index=1)就是我们需要的内容
    NSString *capturedContent = [inputString substringWithRange:[match rangeAtIndex:1]];
    [targetContents addObject:capturedContent];
}

// 输出结果:["© Dimitrios Ourdoulidis", "© Dig Athens"]
NSLog(@"提取到的目标内容:%@", targetContents);

关键细节解释

  • pattern中的©.*?:©明确指定内容开头,.*?是非贪婪匹配,确保只会匹配到当前标签的</caption>就停止,不会错误地跨多个标签匹配
  • 捕获组():把我们需要的内容包裹起来,这样在遍历匹配结果时,通过rangeAtIndex:1就能直接拿到目标内容(index=0是整个包含标签的匹配范围)
  • 错误处理:添加了正则创建失败的判断,避免程序崩溃

注意事项

  • 如果你的字符串里存在嵌套的<caption>标签(这种情况在标准HTML中很少见),这个正则可能会失效,但通常业务场景下不会遇到这种情况
  • 如果字符串是从网页获取的,记得先处理好编码转换,确保NSString内容是正确解码后的格式

内容的提问来源于stack exchange,提问作者Artyom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:29:11