2009-09-26 3 views
34

내가 이해하는 바에 따르면, 백 슬래시 점 (\.)은 어떤 문자의 한 문자를 의미합니까? 그래서 백 슬래시는 이스케이프이기 때문에 역 슬래시 (backslash backslash)가되어야합니다. "\\."Java 정규 표현식 value.split ("\."), "백 슬래시 점"은 문자로 나눕니 까?

이것은 문자열과 어떤 관련이 있습니까? 방금 작업 한 기존 코드에서이 코드를 보았습니다. 내가 이해 한대로 문자열을 개별 문자로 분할합니다. 대신 String.toCharArray() 대신이 작업을 수행합니다. 이렇게하면 배열의 각 문자열에 대해 하나의 char 만 포함하는 문자열 배열로 문자열이 분할됩니까?

답변

68

자바 문자열 리터럴에서 백 슬래시 ('\') 문자가 이스케이프 문자 인 것으로 추측됩니다. 따라서 '\'이스케이프를 Java String으로 작성된 정규 표현식에서 사용하려면 이스케이프해야합니다. 예 :

Pattern.compile("\."); // Java syntax error 

// A regex that matches a (any) character 
Pattern.compile("."); 

// A regex that matches a literal '.' character 
Pattern.compile("\\."); 

// A regex that matches a literal '\' followed by one character 
Pattern.compile("\\\\."); 

String.split(String separatorRegex) 방법 정규식과 일치하는 부분에 의해 구분 된 부분 문자열로 분할한다. 따라서 str.split("\\.")str을 단일 리터럴 '.'로 구분 된 하위 문자열로 나눕니다. 캐릭터.

+0

: 괜찮습니다.! 하지만 네가 백 슬래시 네 개를 왜 그렇게했는지 자세히 설명해 주시겠습니까? 3 명이 없어야 하나? – Oliver

+2

리터럴 백 슬래시는 정규식에서 한 번 이스케이프 처리해야합니다. 2를 준다.이 2 개의 역 슬래시는 모두 문자열 리터럴로 이스케이프되어야한다. 4 백 슬래시는 자바 컴파일 오류를 줄 것이다. 그것을 시도하고 직접보십시오. –

+0

왜 Pattern.compile ("\."); 구문 오류가 발생합니까? – adub3

7

정규식 "." 당신이 진술 한대로 어떤 문자와도 일치합니다. 그러나 이스케이프 처리 된 점 "\." 리터럴 점 문자와 일치합니다. 따라서 192.168.1.1은 "\."로 분리됩니다. { "192", "168", "1", "1"}이됩니다.

당신의 말씨가 명확하지는 않지만, 당신이 묻고있는 말입니다.