我正在寻找定位和更改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/