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
相关产品推荐
相关产品推荐

