2012-04-23 2 views
1

경고 코드NSRegularExpression주고 여기에

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)" options:NSRegularExpressionCaseInsensitive error:&error]; 

자체가 작동 코드를하지만,이 경고 제공 : 오류 여전히

NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines 

하지만 :

"Unknown escape sequence \." 

가 나는 또한 시도 옵션을 계속됩니다. 누구든지이 오류가 발생하는 이유와 제거 방법을 설명 할 수 있습니까? 당신이 리터럴 문자열로 정규 표현식을 작성하고 백 슬래시가 포함 된 경우 백 슬래시는 문자열 리터럴에 (예를 들어 \n, \t 등) 일부 특수 문자를 이스케이프를 위해 사용되기 때문에

+0

참조 http://stackoverflow.com/questions/6812206/unknown-escape-sequence-regular-expression –

답변

5

, 당신은 두 번째 백 슬래시를 사용하여 탈출해야 .

정규 표현식에 \.이 포함되도록하려면 \\.으로 작성해야합니다. 다시 말하지만, 문자열 리터럴을 사용하는 경우에만 적용됩니다. 파일에서 정규식을로드하는 경우가 아닙니다.

실제로 백스 캐쉬가없는 마침표를 사용하려면 (백킹을 효과적으로 마쳤 으면) 백 슬래시를 제거하여 경고를 제거하십시오.

+0

감사합니다. 하지만이 기능을 변경합니까 ?? –

+1

예, 점을 정규식 구문의 일부인 것과 달리 정규식에서 점으로 만듭니다. 정규 표현식을 사용하는 방법이라고 생각합니다. 그렇지 않으면 백 슬래시를 제거해야 경고없이 동일한 동작을 수행해야합니다. – omz

+0

@omz :이 경우 의미가 바뀌지 않을 것이라고 생각합니다. 이 경고는 문자열 프로세서에서 나온 것처럼 보이지만 정규식 엔진에서는 발생하지 않습니다. 이것은 암묵적으로'\\. '로 번역되었음을 의미합니다. 그러나'\ b' (백 스페이스 대 단어 경계)와 같은 다른 이스케이프 시퀀스가 ​​제대로 이스케이프되지 않으면 그 의미를 변경하기 때문에 여전히 유용한 경고입니다. –