ios - NSString的范围,更改html标签

标签 ios iphone objective-c nsstring nsrange

我正在寻找定位和更改html图像标签范围的方法。在网上找不到任何好的解决方案,希望您能为我提供帮助。

示例字符串:

NSString *htmlString = @"<p><a href="/url/10/512.png"><img src="/url/10/512.png" alt=" " border="0" /></a></p><div style="clear:both;"></div>";

如何查找和更改img src="/url/10/512.png"

img源是动态的并且总是不同的,因此我正在寻找最佳解决方案。

我能想到的最好的方法是使用rangeOfString查找img src=",然后从该范围循环遍历字符串,并找到qoute标记“,那么我就会知道整个范围,并且可以更改它。

但这似乎令人讨厌,我认为可以找到更好的解决方案。也许有人知道怎么做,或者知道一些链接可以找到有用的东西?

编辑:
抱歉,我没有提到,我的字符串可以更长,并且包含多个img标签
例如
NSString *htmlString = @"<p><a href="/url/10/512.png"><img src="/url/10/512.png" alt=" " border="0" /></a><a href="/url/10/513.png"><img src="/url/10/513.png" alt=" " border="0" /></a></p><div style="clear:both;"></div>";

提前致谢!

最佳答案

如果您用对 rangeOfString:options:range: 的调用替换了在循环中用双引号引起来的双引号,并将范围从img src="子字符串的末尾加一个到字符串的末尾,则解决方案将不再“显得讨厌”。当然,您始终可以使用正则表达式来查找img src=\"([^\"]*)\",但这可能需要一些额外的代码行:

NSString *str = @"<p><a href=\"/url/10/512.png\"><img src=\"/url/10/512.png\" alt=\" \" border=\"0\" /></a></p><div style=\"clear:both;\"></div>";
NSError *err;
NSRegularExpression *regex = [NSRegularExpression
    regularExpressionWithPattern:@"img src=\"([^\"]*)\""
    options:NSRegularExpressionCaseInsensitive
    error:&err];
NSTextCheckingResult *m = [regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];
if (!NSEqualRanges(m.range, NSMakeRange(NSNotFound, 0))) {
    NSLog(@"%@", [str substringWithRange:[m rangeAtIndex:1]]);
}

这产生了输出
/url/10/512.png

我的字符串可以更长,并且包含多个img标签

使用上述正则表达式,您可以通过调用matchesInString:并遍历结果来获取所有内容。

关于ios - NSString的范围,更改html标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433319/

相关文章:

ios - 从 objective-c 中的 nsstring 获取最后一个空格

ios - 如何检测月/年变化

iOS使用socket连接发送数据

iphone - 将 pbm 文件转换为 IplImage

ios - Swift - 来自 CIImage QR 代码的图像数据/如何呈现 CIFilter 输出

ios - 如何启动 OpenTok/TokBox session 存档?

iphone - 有没有好的iphone开源棋牌游戏?

objective-c - iOS 5 - Webview - 缩放以适合

ios - 在导航栏中使用 UITableViewController

objective-c - 为什么这个没有保存?