Ios NSString的范围,更改html标记
我正在寻找找到一系列html图像标记并对其进行更改的方法。在网上没有找到任何好的解决方案,所以希望你们能帮助我 示例字符串:Ios NSString的范围,更改html标记,ios,iphone,objective-c,nsstring,nsrange,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>";
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>";
提前谢谢 您可以使用此NSString方法
- (NSRange)rangeOfString:(NSString *)aString
您可以找到所需字符串的NSRange,并从该范围获取数据
HPH.您可以使用此NSString方法
- (NSRange)rangeOfString:(NSString *)aString
您可以找到所需字符串的NSRange,并从该范围获取数据
HPH.如果您将结束双引号的循环部分替换为调用,将img src=substring的结尾加上1的范围传递到字符串的结尾,那么您的解决方案将不再令人讨厌。当然,您可以始终使用regex来查找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]]);
}
我的字符串可以更长,并且由多个img标记组成
使用上面的正则表达式,您可以通过调用MatcheInstalling:,并在结果上循环来获得所有结果。如果您将结束双引号的循环部分替换为调用to,将img src=substring的结尾加上1的范围传递到字符串的结尾,那么您的解决方案将不再令人讨厌。当然,您可以始终使用regex来查找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]]);
}
我的字符串可以更长,并且由多个img标记组成
使用上面的正则表达式,您可以通过调用MatcheInstalling:,并在结果上循环来获取所有结果。试试这个
htmlString = [htmlString substringFromIndex:[htmlString rangeOfString:@"img src="].location];
NSRange range = [htmlString rangeOfString:@".png\""];
htmlString = [htmlString substringToIndex:(range.location + range.length)];
NSLog(@"%@",htmlString);
试试这个
htmlString = [htmlString substringFromIndex:[htmlString rangeOfString:@"img src="].location];
NSRange range = [htmlString rangeOfString:@".png\""];
htmlString = [htmlString substringToIndex:(range.location + range.length)];
NSLog(@"%@",htmlString);
您可以为NSString创建一个类别。特别是,如果要在不同的类中使用此操作
@interface NSString (Utils)
- (NSString *)replaceStringPattern:(NSString *)searchPattern withString:(NSString *)replacementString;
@end
@implementation NSString (Utils)
- (NSString *)replaceStringPattern:(NSString *)searchPattern withString:(NSString *)replacementString
{
NSRange range = NSMakeRange(0, self.length);
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:searchPattern options:NSRegularExpressionCaseInsensitive error:&error];
if (error)
{
NSLog(@"ERROR: Regular expression cannot be created for pattern %@", searchPattern);
}
return [regex stringByReplacingMatchesInString:self options:0 range:range withTemplate:replacementString];
}
@end
rangeOfString:method和NSRegularExpression类都可以使用,我更喜欢最后一个。然后,您可以从项目中的任何位置调用它,如下所示:
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>";
NSString *newImgSrc = @"/url/10/512_new.png";
NSString *newHtmlString = [htmlString replaceStringPattern:@"img src=\"([^\"]*)\""
withString:[NSString stringWithFormat:@"img src=\"%@\"", newImgSrc]];
您可以为NSString创建一个类别。特别是,如果要在不同的类中使用此操作
@interface NSString (Utils)
- (NSString *)replaceStringPattern:(NSString *)searchPattern withString:(NSString *)replacementString;
@end
@implementation NSString (Utils)
- (NSString *)replaceStringPattern:(NSString *)searchPattern withString:(NSString *)replacementString
{
NSRange range = NSMakeRange(0, self.length);
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:searchPattern options:NSRegularExpressionCaseInsensitive error:&error];
if (error)
{
NSLog(@"ERROR: Regular expression cannot be created for pattern %@", searchPattern);
}
return [regex stringByReplacingMatchesInString:self options:0 range:range withTemplate:replacementString];
}
@end
rangeOfString:method和NSRegularExpression类都可以使用,我更喜欢最后一个。然后,您可以从项目中的任何位置调用它,如下所示:
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>";
NSString *newImgSrc = @"/url/10/512_new.png";
NSString *newHtmlString = [htmlString replaceStringPattern:@"img src=\"([^\"]*)\""
withString:[NSString stringWithFormat:@"img src=\"%@\"", newImgSrc]];
正则表达式是实现这一点的最佳方法,它类似于@img src=\.*\,不是这样,但您可以使用这种方法来解决您的问题problem@AsaDickens,谢谢你的评论,我也想到了regex的,当谈到正则表达式时,我真的是个傻瓜:正则表达式是解决这个问题的最好方法,它类似于@img src=\\.*\,不是这样,但你可以用这种方法来解决你的问题problem@AsaDickens,谢谢你的评论,我也想到了regex的,只是当谈到正则表达式时,我真的是个傻瓜:谢谢你的评论,这正是我要找的!谢谢你的评论,这正是我想要的!