2013-07-10 58 views
0

我正在編寫一個程序,使文本以/*開頭,並以*/結尾爲不同的顏色(C語句的語法高亮顯示)。當我嘗試這個OS X在正則表達式中使用文字星號

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

我得到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]; 
} 

評論的文本顏色沒有變化,但我沒有看到我的正則表達式有什麼問題。有人可以告訴我爲什麼這不會工作?我不認爲這是我得到結果或改變顏色的方式的問題,因爲我對其他正則表達式使用相同的方法。

+1

您是否已驗證'self.string'實際上是否包含一些形式爲'/ * ... * /'的文本? – rmaddy

+0

@rmaddy感謝您指出這一點,我正在測試這個錯誤的文件。 –

回答

1

您要使用:"\\*"

\*是在正則表達式*轉義序列,但在C字符串,\也開始一個轉義字符標記,所以你要逃避爲好。

+0

剛剛試過'@「\\ [*]。* [*] \\」',但那不起作用 –

+0

'@「/\\*.*\\*/」;'? – mipadi

+0

工作,謝謝。 –

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

我得到未知的轉義序列。

字符串首先轉換字符串中的轉義序列,然後將結果移交給正則表達式引擎。例如,轉義序列可能是\t,表示選項卡,或\n表示換行符。該字符串首先將轉義序列轉換爲特殊代碼。您的錯誤是說\*不是NSString的合法轉義序列。

正則表達式引擎需要看到一個字面反斜槓後面跟一個*。要在字符串中獲得文字反斜槓,您需要編寫\\。但是,爲了便於閱讀,我更喜歡使用像您一樣的角色類來進行第二次嘗試。

你應該NSLog什麼結果數組包含看看你得到什麼匹配。如果匹配符合你的期望,那麼問題就不在於正則表達式。

相關問題