Intereting Posts
Google Maps Javascript SDK v3 или переключиться на Google Maps iOS SDK как проверить NSData для определенных значений байтов (aka header) UIImagePNGRпредставление writeToFile могут быть обнаружены ошибки? iOS: ограничить точность типа данных «double» без преобразования в NSString Могу ли я создать 2 XIB для одного вида? Сравнение NSDateComponents MKLocalSearch не находит все близлежащие рестораны «Не может найти объект кода на диске» после добавления Swift libs в проект iOS Я не могу встряхнуть / движение на своем устройстве iOS Локализованные строки не работают Возможно получить рекламу Beacon в IOS без использования идентификатора компании Apple 0x004c Как я могу найти кнопку «Найти моих друзей», используя iOS 5? это как если бы кнопки были запечатаны в кожу Binding Deezer IOS SDK (Objective-C) в приложение Xamarin (C #) Получение данных из NSURLSession через POST с помощью JSON Поверните UIView на основе UITouch

Диапазон NSString, изменение html-тега

Я ищу способы найти диапазон тегов изображения 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>"; 

Как найти и изменить img src="/url/10/512.png" .

Источник img динамичен и всегда отличается, поэтому я ищу оптимальное решение.

Лучший способ, с помощью которого я могу придумать, – найти img src=" с rangeOfString, а затем перебрать строку из этого диапазона и найти метку qoute", тогда я бы знал весь диапазон и мог его изменить.

Но это кажется неприятным, и я думаю, что лучшие решения вокруг. Может быть, кто-то знает, как или знает некоторые ссылки, где я могу найти что-то полезное?

EDIT: извините, что я не упомянул, моя строка может быть длиннее и содержать более одного тега img, например

 NSString *htmlString = @"<p><a href="/url/10/512.png"><img src="/url/10/512.png" alt=" " border="0" /></a><a href="/url/10/513.png"><img src="/url/10/513.png" alt=" " border="0" /></a></p><div style="clear:both;"></div>"; 

Заранее спасибо!

Если вы замените часть, в которой вы зацикливаете для замыкания двойной кавычки, с вызовом rangeOfString:options:range: передавая диапазон от конца img src=" substring плюс один до конца строки, ваше решение не будет конечно, вы всегда можете использовать регулярное выражение для поиска 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]]); } 

Это дает результат

 /url/10/512.png 

моя строка может быть длиннее и содержать более одного тега img

С помощью регулярного выражения вы можете получить их все, вызвав matchesInString: и зациклив на результаты.

Вы можете создать категорию для 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]]; 

Попробуй это…

 htmlString = [htmlString substringFromIndex:[htmlString rangeOfString:@"img src="].location]; NSRange range = [htmlString rangeOfString:@".png\""]; htmlString = [htmlString substringToIndex:(range.location + range.length)]; NSLog(@"%@",htmlString); 

Вы можете использовать этот метод NSString

 - (NSRange)rangeOfString:(NSString *)aString 

Вы можете найти NSRange из String, который вы хотите, и получить данные из этого диапазона.

РВД.