0

我正在编写一个程序来制作以不同颜色开头/*和结尾的文本*/(C 注释的语法突出显示)。当我尝试这个

@"/\*.*\*/";

我明白了unknown escape sequence。所以我认为要获得字面星号,我必须使用它

@"/[*].*[*]/";

而且我没有收到任何错误,但是当我使用此代码时

commentPattern = @"/[*].*[*]/";
reg = [NSRegularExpression regularExpressionWithPattern:commentPattern options:kNilOptions error:nil];
results = [reg matchesInString:self.string options:kNilOptions range:NSMakeRange(0, [self.string length])];
for (NSTextCheckingResult *result in results)
{
    [self setTextColor:[NSColor colorWithCalibratedRed:0.0 green:0.7 blue:0.0 alpha:1.0] range:result.range];
}

评论的文本颜色没有改变,但我看不出我的正则表达式有什么问题。有人能告诉我为什么这行不通吗?我不认为我获得结果或更改颜色的方式有问题,因为我对其他正则表达式使用相同的方法。

4

2 回答 2

1

你想用这个:"\\*"

\**是正则表达式中的转义序列,但在 C 字符串中,\也开始转义字符标记,因此您也必须对其进行转义

于 2013-07-10T00:21:18.810 回答
0
@"/\*.*\*/";

我得到未知的转义序列。

字符串首先转换字符串中的转义序列,然后将结果交给正则表达式引擎。例如,转义序列可能是\t,它代表一个制表符,或者\n代表一个换行符。该字符串首先将转义序列转换为特殊代码。您的错误是说这\*不是 NSString 的合法转义序列。

正则表达式引擎需要看到文字反斜杠后跟 *。要在字符串中获得文字反斜杠,您需要编写\\. 但是,为了便于阅读,我更喜欢使用第二次尝试时所做的字符类。

您应该 NSLog 结果数组包含的内容,以查看您得到的匹配项。如果匹配是您所期望的,那么问题不在于正则表达式。

于 2013-07-10T00:21:26.467 回答