NSString在字符串出现时添加标签

时间:2013-10-15 11:22:55

标签: ios replace nsstring

我需要替换像这样的字符串;

NSString *temp = @"this is a sentence";

NSString *temp = @"this is a <span style=\"color:red\">sentence</span>"

现在我可以使用以下行完成此操作;

temp = [temp stringByReplacingOccurrencesOfString:@"sentence" withString:@"<span style=\"color:red\">sentence</span>" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [temp length])];

现在使用上面的问题是我不知道替换或替换字符串将在什么情况下。我可以通过使用不敏感搜索解决这个问题,但我需要更换的字符串在同一个格式化为最终输出中的原始格式。

任何帮助?

修改

我过度简化了我的问题所以它更容易理解,但基本上我需要stringByReplacingOccurrencesOfString而忽略大写/小写,但同时在最终字符串上保持相同的大写/小写。

3 个答案:

答案 0 :(得分:3)

您可以在替换字符串中使用$0替换“正则表达式” 指的是实际找到的子字符串:

NSString *temp = @"this is a foo, or a FOO";
NSString *result = [temp stringByReplacingOccurrencesOfString:@"foo"
                    withString:@"<span>$0</span>"
                       options:NSRegularExpressionSearch|NSCaseInsensitiveSearch
                         range:NSMakeRange(0, [temp length])];

结果:

this is a <span>foo</span>, or a <span>FOO</span>

但请注意,搜索模式中的任何正则表达式“特殊字符”都必须进行转义。

答案 1 :(得分:1)

您应该使用正则表达式来查找“句子”并在其周围添加标签。

$ 1 指的是匹配的正则表达式组(句子)

\ b 表示正则表达式中的单词边界。如果你不包括它,也会匹配像“asentenceb”这样的词。

NSString *test = @"my test sentence is a Sentence. Oh yes, a sEnTenCe!";
NSRange testRange = NSMakeRange(0, test.length);

// Create regex object
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\b(sentence)\\b" options:NSRegularExpressionCaseInsensitive error:&error];

// Replace matches with template
NSString *modifiedString = [regex stringByReplacingMatchesInString:test options:0 range:testRange withTemplate:@"<span style=\"color:red\">$1</span>"];

注意:您可能会使用 stringByReplacingOccurrencesOfString 做类似的事情。

答案 2 :(得分:0)

检查是否     <span style=\"color:red\">sentence</span> 在你的nsstring中。如果没有,用新的nsstring

替换原来的nsstring