8

だから私NSStringは基本的htmlにすべての通常のhtml要素を持つ文字列です。私がやりたいことは、すべてのタグからそれを取り除くことです。img タグには、imgmax-width、style、またはその他の属性がある場合とない場合があるため、前もってそれらの長さはわかりません。彼らは常にで終わります/>

どうすればこれを行うことができますか?

編集:の答えに基づいてnicolasthenoz、必要なコードが少ないソリューションを思いつきました:

NSString *HTMLTagss = @"<img[^>]*>"; //regex to remove img tag
NSString *stringWithoutImage = [htmlString stringByReplacingOccurrencesOfRegex:HTMLTagss withString:@""]; 
4

3 に答える 3

14

オプションでNSStringメソッドstringByReplacingOccurrencesOfStringを使用できます。NSRegularExpressionSearch

NSString *result = [html stringByReplacingOccurrencesOfString:@"<img[^>]*>" withString:@"" options:NSCaseInsensitiveSearch | NSRegularExpressionSearch range:NSMakeRange(0, [html length])];

または、 のreplaceMatchesInString方法を使用することもできますNSRegularExpression。したがって、HTML が にあると仮定するとNSMutableString *html、次のことができます。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img[^>]*>"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];

[regex replaceMatchesInString:html
                      options:0
                        range:NSMakeRange(0, html.length)
                 withTemplate:@""];

個人的にはstringByReplacingOccurrencesOfRegexRegexKitLite. 他にやむを得ない問題がない限り、このような単純なものにサードパーティのライブラリを導入する必要はありません。

于 2012-09-19T15:02:45.663 に答える
4

正規表現を使用して、文字列内の一致を見つけて削除します! 方法は次のとおりです

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img[^>]*>"
                                                                       options:NSRegularExpressionCaseInsensitive 
                                                                         error:nil];

NSMutableString* mutableString = [yourStringToStripFrom mutableCopy];
NSInteger offset = 0; // keeps track of range changes in the string due to replacements.
for (NSTextCheckingResult* result in [regex matchesInString:yourStringToStripFrom 
                                                    options:0 
                                                      range:NSMakeRange(0, [yourStringToStripFrom length])]) {

    NSRange resultRange = [result range];   
    resultRange.location += offset; 

    NSString* match = [regex replacementStringForResult:result 
                                               inString:mutableString 
                                                 offset:offset 
                                               template:@"$0"];

    // make the replacement
    [mutableString replaceCharactersInRange:resultRange withString:@""];

    // update the offset based on the replacement
    offset += ([match length] - resultRange.length);
}
于 2012-09-19T14:34:57.540 に答える