2013-05-30 3 views
-2

안녕하세요, 저는 세로줄로 구분 된 문자열을 분할하려고합니다. 예를 들면 : 자바에서자바 정규식 표현 이스케이프 문자

String str = "a=1|b=2"; 

, 우리는 다음과 같이해야한다 : 나는 하나의 슬래시를 사용하는 경우

str.split("\\|"); 

는 :

:

str.split("\|"); 

컴파일러는 오류를 제공합니다 유효하지 않은 이스케이프 문자열 (유효한 문자는 \ b \ t \ n \ f \ r \ "\ '\)

왜 이런 일이 발생하는지 설명 할 수 있습니까? 감사!

+2

'|'기호는 정규 표현식에서 특별한 의미를 갖기 때문에 이스케이프해야합니다. 역 슬래시 문자 _also_는 문자열 (이스케이프 문자)에서 특별한 의미를 가지기 때문에 이스케이프 처리해야합니다. 그래서 ... 정규 표현식에 두 개의'\'기호가 필요합니다. 이것은이 사이트에서 여러 번 다루어졌습니다. – jahroy

답변

4

백 슬래시 \은 특수 문자입니다. Java 세계에서는 문자를 이스케이프하는 데 사용됩니다.

파이프 |은 Regex 세계에서 "OR"을 의미하는 특수 문자입니다.

파이프를 구분 기호로 사용하려면 파이프를 이스케이프해야합니다 (정규식 파싱 중에 인식 될 수 있도록). 정규식에서 파이프를 가져와야합니다 (\|).

그러나 backshlash 당신이 String 객체를 사용하는 자바 및 그 특수 문자이기 때문에, 당신은이 최종 예상되는 최종 결과로 해석 될 수 있도록 백 슬래시 탈출해야 : \|

, 그래서 당신을하기를 \\|

첫 번째 백 슬래시는 파이프를 이스케이프 처리하는 두 번째 백 슬래시 (java 요구 사항)를 이스케이프 처리합니다 (정규식 요구 사항).

1

Java 문자열에서 백 슬래시는 다른 백 슬래시로 이스케이프해야합니다. 따라서 정규식의 "정식"형식은 실제로 \|이며 Java 문자열로 쓰려면 "\\|"이어야합니다.