簡體   English   中英

OS X在正則表達式中使用文字星號

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM