【发布时间】:2011-12-07 17:20:27
【问题描述】:
我的问题是在包含 html 文本的 NSString 中查找特定单词(例如:span)的位置,然后替换该单词。
例如,如果我的目标词是 span,我的替换文本应该如下所示:
<SPAN style="BACKGROUND-COLOR: #FF0000">span</SPAN>
如果我的起始文本是:
<span class='i_04_12_000000'>this is a span</span>
我想要的结果是:
<span class='i_04_12_000000'>this is a <SPAN style="BACKGROUND-COLOR: #FF0000">span</SPAN></span>
显然,如果我只搜索 span,我不会只在 html 标记内找到该匹配项。 关于如何定位正确字符串的想法,即使使用 NSRange ?
更新:
这是最终的解决方案:;)
+(NSString *)emphasizeString:(NSString *)stringToEmphasize inText:(NSString *)fullText
{
NSString * regExp = [NSString stringWithFormat:@"(?i)([\\s\\.,>'-])(%@)([\\s\\.,;!\\?\\)<])",stringToEmphasize];;
NSArray * regexResult = [fullText arrayOfCaptureComponentsMatchedByRegex:regExp];
NSString * result = [NSString stringWithString:fullText];
if([regexResult count] >0)
{
for (NSArray * match in regexResult)
{
NSString * all = [match objectAtIndex:0];
NSString * before = [match objectAtIndex:1];
NSString * matched = [match objectAtIndex:2];
NSString * after = [match objectAtIndex:3];
result = [result stringByReplacingOccurrencesOfString:all
withString:[NSString stringWithFormat:@"%@<SPAN style=\"BACKGROUND-COLOR: #FF0000\">%@</SPAN>%@",before, matched, after]
options:NSCaseInsensitiveSearch
range: [result rangeOfString:all]];
}
}
NSLog(@"%@",result);
return result;
}
【问题讨论】:
-
示例 html 字符串:这是一个跨度 结果:这是一个跨度
-
您要查找的这些特定词是否被任何类型的标记包围,例如:
<span>? -
@Kappe 您应该发布您的解决方案作为您问题的答案。过两天就可以接受了。
标签: html objective-c ios regex nsstring