0

次のようないくつかの img タグを含む html データがあります。

img width=500 height=400
img width=400 height=250
img width=600 height=470

高さと幅は常に変化します。そのhtmlデータを置き換える必要があります。Objective-C を使用して、その html データを「img with=100」に置き換える必要があります。

書いたけど一致しない

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"/(img\\s)((width|height)(=)([0-9]+)"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:myhtmldata
                                                    options:0
                                                      range:NSMakeRange(0, [myhtmldata length])];

NSString *modifiedString; 
if (numberOfMatches > 0)
{
   modifiedString = [regex stringByReplacingMatchesInString:myhtmldata
                                                           options:0
                                                             range:NSMakeRange(0, [myhtmldata length])
                                                      withTemplate:@"img width=30"];

}

手伝って頂けますか ?

4

2 に答える 2

2

サンプル コードから意図を正しく推測できれば、使用NSRegularExpressionして幅を 30 に変更するだけです。次に:

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSError *regexError = nil;
        NSRegularExpressionOptions options = 0;
        NSString *sampleText = @"img width=500 height=400";
        NSString *pattern = @"^(img\\s+)width=\\d+(\\s+height=\\d+)";
        NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:options error:&regexError];

        sampleText = [expression stringByReplacingMatchesInString:sampleText
                                                          options:0
                                                            range:NSMakeRange(0,sampleText.length)
                                                     withTemplate:@"$1width=30$2"];
        printf("%s\n",[sampleText UTF8String]);
    }

}

img width=30 height=400コンソールに出力します。

編集:

正規表現を変更する(img\s+width=)\d+\s+height=\d+と、適切にエスケープされたときに次のようになります。

@"(img\\s+width=)\\d+\\s+height=\\d+"

次に、テンプレート文字列を に変更し@"$130"ます。これらの変更を元のコードに加える場​​合はimg、HTML に埋め込まれたタグのすべての出現に一致する必要があります。たとえば、次のように変更する必要があります。

<html>
    <body>
        <img width=500 height=400>
        <img width=520 height=100>
    </body>
</html>

に:

<html>
    <body>
        <img width=30>
        <img width=30>
    </body>
</html>

これはあなたの仕様が求めるものですか?

于 2012-12-09T04:47:42.023 に答える
0

別の方法を見つけましたが、機能しています。ここにコードがあります:

NSArray* ary = [oldHtml componentsSeparatedByString:@"<img"];
NSString* newHtml = [ary objectAtIndex:0];
for (int i = 1; i < [ary count]; i++) {

    newHtml = [newHtml stringByAppendingString:[@"<img width=300 " stringByAppendingString:[[ary objectAtIndex:i] substringFromIndex:[[ary objectAtIndex:i] rangeOfString:@"src"].location]]];

}
于 2012-12-09T23:14:37.387 に答える