【问题标题】:Replace words in NSMutableString替换 NSMutableString 中的单词
【发布时间】:2011-05-12 17:02:04
【问题描述】:

我做了一个语法高亮,我需要用这个词在标签中替换所有出现的特殊词。例如我有:

@"int main{ bla bla; float=0; bla bla;"

想要得到

@"int main{ bla bla; float=0;"等等

(必须将 \ 放在 FONT 之前)。 我有 specialwords 数组,在 html 中有这个文本(浮动它,我从 UITextView contentAsHTMLString 得到它)并且只想放置颜色标签。怎么做?

试过 stringByReplacingOccurrencesOfString 但是

printf()

不是我想要的。

尝试 regexkitlite。 [editString replaceOccurrencesOfRegex:[NSString stringWithFormat:@"[^a-zA-z]%@[^a-zA-z]",specialString] withString:[NSString stringWithFormat:@"$0%@$1",specialString] 范围: NSMakeRange(0, [editString length])];

创建异常(索引超出范围... O_O wtf?),如果我从“withString”中删除 $0 和 $1,它将不会替换“int”而是“int”(无论是 int 字附近的任何内容)。

【问题讨论】:

  • 如果你真的想要一个任意代码示例的语法高亮器(你只涵盖 C 顺便说一句吗?)简单的替换和正则表达式都不会让你到达那里 - 想想例如s=" int ";,转义换行符,typedefs,...我要么搜索现有的荧光笔,要么使用现有的解析器(例如 clang 的 API)。

标签: iphone objective-c ios


【解决方案1】:

首先将颜色应用于“int”事件:

NSString *initialString = @"int main{ bla bla; float=0; bla bla;";    
NSString *stringWithColorInt = [initialString stringByReplacingOccurrencesOfString:@"int" withString:@"<FONT COLOR=FF00FF>int<\FONT>" options:NSLiteralSearch range:NSRange(0,[initialString length])];

然后是“浮动”事件:

NSString *stringWithColorFloat = [stringWithColorInt stringByReplacingOccurrencesOfString:@"float" withString:@"<FONT COLOR=FF00FF>float<\FONT>" options:NSLiteralSearch range:NSRange(0,[stringWithColorInt length])];

【讨论】:

  • 我有一个带有代码 + html 标签的巨大字符串。 stringByRaplacing 替换所有“int”,包括内部单词,如 printf。
  • NSLiteralSearch 没有帮助。我仍然在 printf 中突出显示 int :( 我想说的是 stringByReplacingOccurrencesOfString:@"int" withString:@"int" 使得 pr_int_f 。
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 2015-03-02
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 2016-09-02
相关资源
最近更新 更多