2011-05-12 90 views
0

我做了一个语法突出显示,我需要用标签中的这个单词替换所有出现的特殊单词。例如我有:用NSMutableString替换单词

@“int main {bla bla; float = 0; bla bla;”

,并希望得到

@” < \ FONT COLOR = FF00FF> INT < \ FONT>主{血乳酸血乳酸; < \ FONT COLOR = FF00FF>浮< \ FONT> = 0; “等等。

(不得不放在\ FONT之前)。 我有特殊字符数组,在html中有这个文本(与它一起浮动,我从UITextView contentAsHTMLString中获得它),并且只想放置颜色标签。如何?

试过stringByReplacingOccurrencesOfString但

PR < \ FONT COLOR = FF00FF> INT < \ FONT> f()的

不是我想要的。

尝试regexkitlite。[editString replaceOccurrencesOfRegex:[NSString stringWithFormat:@“[^ a-zA-z]%@ [^ a-zA-z]”,specialString] withString:[NSString stringWithFormat:@“$ 0%@ $ 1”,specialString] range :NSMakeRange(0,[editString length])];如果我从“withString”中删除$ 0和$ 1,它将不会替换“int”,而是“int”(无论是否接近int字)。

+0

如果你真的想为任意代码样本语法高亮(你只覆盖C btw?)简单的替换和正则表达式都不会让你在那里 - 想想例如's =“int”;',转义换行符,typedefs,...我要么搜索现有的荧光笔,要么使用现有的解析器(例如clang的API)。 – 2011-05-12 18:35:05

回答

0

首先颜色应用到了“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])]; 
+0

我有一个巨大的代码+ html标签的字符串。 stringByRaplacing替换所有的“int”,包括内部的单词,比如printf。 – aspcartman 2011-05-12 17:49:35

+0

我将编辑我的答案 – 2011-05-12 17:57:35

+0

NSLiteralSearch不起作用。我仍然在printf中突出显示int :(我想说的是stringByReplacingOccurrencesOfString:@“int”withString:@“_ int_”使pr_int_f。 – aspcartman 2011-05-12 18:16:37