2014-03-03 2 views
0

내 정규식자바 정규식 - 내가, 내가 * <em>불법 반복 문자 *</p> <p></em> 나는이 정규식을 테스트 얻고이 사용 Pattern.complie()에서 자바를 컴파일 할 때 Ilegal 반복 문자

(?:--|#|\/\*|{) 

입니다

(a|\/\*|b) 

내가 컴파일 할 때 오류가 표시되지 않습니다.

왜 이런 현상이 발생합니까?

+2

이 때문이 아니라'{'의 그것을인가? 반복해야하는 횟수를 지정하는 데 사용됩니다. 나는 그것을 도망 칠 것이다 :'(? : - | # | \/\ * | \ {)' –

+0

@ GáborBakos 대답이 아닌 주석이어야한다. :) – Pshemo

+0

그건 진짜 정규 표현식이 아니다. ? –

답변

2

because of {입니다. 이것은 반복되어야하는 것을 몇 번이나 지정하는데 사용됩니다. 예를 들어 x{2,4}x 2 (xx), 3 (xxx) 또는 4 (xxxx) 번을 반복합니다.

당신이 정규식 {이 문자는 이스케이프 할 필요가 일치 할 경우

(?:--|#|\/\*|\{) 
+0

일반적으로 숫자 뒤에 '}'이 나오지 않으면'{'를 이스케이프 할 필요가 없습니다 ... 자바의 특수성으로 인해 문제를 해결할 수 있습니다. 구현. – Robin

+1

@Robin : 예, Java는 항상'{'을 한정 기호의 시작으로 취급하고'[''는 문자 클래스의 시작으로 취급합니다. 사실,'''는 그 특이한 set-intersection feature ('&&')를 지원하기 위해 문자 클래스의 의미 *를 그대로 유지합니다. –