2013-07-10 1 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해야합니다. 일치하는 항목이 예상되는 경우 문제는 정규식과 관련이 없습니다.