2016-04-18 16 views
0

私は今、私が持っている私はのiOS:HTML属性付き文字列

... 
<p style="text-align: left;"> 
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460107835846711.jpg" alt="1460107835846711.jpg" width="75" height="103" style="width: 75px; height: 103px;"/> 
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460106959338375.jpg" alt="1460106959338375.jpg" width="359" height="445" style="width: 359px; height: 445px;"/></p> 
... 

のように複数のimgタグを持つHTMLコード

NSAttributedString *htmlstring =[[NSAttributedString alloc] initWithData:[formatString dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
                                       NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:&error]; 

から、文字列にデコードされた属性付きの文字列を持っているの画像のサイズを変更モバイル画面を修正するために画像のサイズを変更します。 そして私は

NSString* substring = @"<img"; 
NSRange range = [htmlstring rangeOfString:substring]; 

を試みたが、それだけで最初の検索結果を返し、ストリングにタグ全体を作る方法?

過去の最初の発生を検索を続けるためにはそんなに

+0

'NSRegularExpression'を使って' 'を見つけることができます – Larme

答えて

2

ありがとう、あなたはあなたがあなたの検索を実行する範囲を調整する必要がありますが、まさにそれを行うことができますNSStringの上の方法があります:。

- [NSString rangeOfString:options:range:]; 
は、

したがって、NSAttributedStringの下に移動し、読み取り専用のstringプロパティでアクセスできるプレーンテキスト表現で作業する必要があります。

だから、アイデアは、新たな探索範囲に一致が検出されたすべての時間を計算することである。

NSString *substring = @"<img"; 
NSString *plainString = [htmlstring string]; 
NSRange searchRange = NSMakeRange(0, [plainString length]); 
NSRange openingTagRange = [plainString rangeOfString:substring options:0 range:searchRange]; 
while (openingTagRange.location < [plainString length]) 
{ 
    NSLog(@"found opening tag at %lu", (unsigned long)openingTagRange.location); 
    searchRange.location = NSMaxRange(openingTagRange); 
    searchRange.length = [plainString length] - NSMaxRange(openingTagRange); 
    openingTagRange = [plainString rangeOfString:openingTagString options:0 range:searchRange]; 
} 

あなたはまた、サブストリングにタグ全体を作りたい場合は、whileループは、次のように展開さ:

最初に表示された閉じ括弧がタグを閉じると仮定していることに注意してください。必ずしもそうではないかもしれません。

関連する問題