[英]OS X Using literal asterisk in regular expression
我正在编写一个程序,使以/*
开头并以*/
结束的文本使用不同的颜色(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];
}
注释的文本颜色没有改变,但是我的正则表达式没有出现任何问题。 有人可以告诉我为什么这行不通吗? 我认为获取结果或更改其颜色的方式没有问题,因为我对其他正则表达式使用相同的方法。
您要使用此: "\\\\*"
。
\\*
是转义序列*
在正则表达式,但在C字符串, \\
也开始一个转义字符标记,所以你必须逃离这一点。
@"/\\*.*\\*/";
我得到未知的转义序列。
字符串首先转换字符串中的转义序列,然后将结果移交给正则表达式引擎。 例如,转义序列可能是\\t
,它代表一个制表符,或者\\n
,代表换行符。 该字符串首先将转义序列转换为特殊代码。 您的错误是说\\*
不是NSString的合法转义序列。
正则表达式引擎需要看到一个反斜杠,后跟一个*。 要在字符串中使用文字反斜杠,您需要编写\\\\
。 但是,出于可读性考虑,我更喜欢像第二次尝试一样使用字符类。
您应该NSLog结果数组包含的内容以查看您得到的匹配项。 如果匹配符合您的期望,则问题不在于正则表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.