2016-11-17 4 views
1

I가 C#에 다음 코드 :
Regex.Escape() 알 수없는 예외

{"parsing \"\hello\" - Unrecognized escape sequence \h."}

가 나는 \ + (some names)이 존재 할 때 필요한 : 나는 다음과 같은 오류가

String str = @"\hello ali how are you? are you fine? hello and hi"; 
Console.WriteLine(Regex.Matches(Regex.Escape(str), @"\hello").Count); 

내 코드. 이스케이프 시퀀스 문자를 사용하지 않기 위해 @을 사용했지만 언급 된 오류가 발생합니다. 왜 이런 일이 일어 나는지 나는 이해할 수 없다!

+2

'Console.WriteLine (Regex.Matches (str, Regex.Escape (@ "\ hello")). Count); ' – dymanoid

+1

정규식이 명령 \ h를 이해하지 못합니다. \ d +와 비슷합니다. – jdweng

답변

1

이스케이프 시퀀스는 서로 다른 의미의 정규 표현식 정규 표현식 모두에서 독립적으로 사용됩니다. 문자열 리터럴에 접두어로 @을 붙이면 컴파일러에서 이스케이프 시퀀스없이 문자 그대로 해석하도록 지시합니다. 그러나 정규식 엔진은 "\ h"를 다시보고 이스케이프 시퀀스로 해석하려고합니다.

은 기본적으로 당신이 적용 할 필요가 모두 문자열 리터럴 @\h을 할 수있는 Regex.Escape 기능을 모두 파서에 의해 문자로 해석 :

Console.WriteLine(Regex.Matches(str, Regex.Escape(@"\hello")).Count); 
2

\은 정규식의 속기 클래스를 나타내는 데 사용됩니다. 예 : \d은 "임의의 숫자"또는 \w은 "모든 단어 문자 (영숫자와 밑줄)"를 의미합니다. 정규식 엔진은 여러분이 \h을 이러한 단축형 시퀀스 중 하나로 사용하려한다고 생각하지만 유효하지 않습니다.

정규 표현식에서 \이라는 문자를 찾으려면 다른 문자로 이스케이프 처리해야합니다 (예 : \\. 그래서 당신의 예제에서 정규 표현식은 \\hello이 될 것입니다.

자세한 내용은 http://www.regular-expressions.info/characters.html을 참조하십시오.

+0

실례합니다. 제 문자열 앞에'@'를 사용했습니다. 내가 배웠 듯이'\'경로는'\\'로 대체해야합니다. 정규 표현식에서 작동하지 않습니까? – Media

+2

정말 같은 것은 아닙니다. @는 C#에게 축 어적 문자열로 취급하도록 지시합니다 (추가 이스케이프는 적용하지 않습니다). 그 문자열은 정규 표현식 엔진으로 전달되고, 정규 표현식 엔진은 자체 규칙을 적용합니다. 그 중 하나는'\ '를 특수 문자로 처리하는 것입니다. – ADyson

+0

고맙습니다. – Media

관련 문제