[英]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.