我需要替换像这样的字符串;
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而忽略大写/小写,但同时在最终字符串上保持相同的大写/小写。
答案 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