Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSString的范围,更改html标记_Ios_Iphone_Objective C_Nsstring_Nsrange - Fatal编程技术网

Ios NSString的范围,更改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>";

我正在寻找找到一系列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方法

- (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的,只是当谈到正则表达式时,我真的是个傻瓜:谢谢你的评论,这正是我要找的!谢谢你的评论,这正是我想要的!