2016-09-02 2 views
1

패턴을 얻으려고합니다 :패턴 이름 특수 문자

숫자 만 a-z A-Z 0-9. + - %

이 잘못, 그 내 코드 : 나는 예외를 인덱스 (17) 전 %가 17 인덱스 근처 불법 문자 범위를 얻고있다

String regex = "[^a-zA-Z0-9_\\.+-\\%]"; 

, 내가 잘못을 무엇을하고 있는가?

+0

기호'+'~'% '를 의미하지 않는 한'-'를 이스케이프 처리해야합니다. –

+0

@pustypawel 위 코드의 이중 백 슬래시는 코드로 서식을 지정할 때까지 분명하지 않습니다 코드 게시, 4만큼 들여 쓰기 또는 백틱으로 둘러싸 기. –

+0

정규 표현식에 '_'가 포함되어 있고 명시된 요구 사항이 포함되어 있지 않으므로이 정규 표현식이 잘못되었습니다. 그리고 'a-z'(숫자가 아님)와 '0-9'(숫자)가 유효하다고 말할 때 "Only * numbers *"는 무엇을 의미합니까? – Andreas

답변

4

%을 정규 표현식으로 이스케이프 할 필요가 없습니다. 그 전에 \을 제거하십시오.

.도 탈출하지 않아야합니다. 문자 클래스 내부에서는이를 수행 할 필요가 없습니다. 문자 클래스 내에서는 문자 "."이 아닌 문자 "를 의미합니다.

그러나 당신은 당신이 아니라 문자 범위보다 리터럴 -를, 평균 -을 탈출 필요성을 .

String regex = "[^a-zA-Z0-9_.+\\-%]"; 
+0

anubhava 대답을 기반으로 나는 탈출 할 필요가 없다고 생각합니다. - 표현의 끝 부분에 있다면 문자? 내가 맞습니까? – pustypawel

+2

@pustypawel 이렇게 표시됩니다. 문자 클래스에 더 많은 문자를 추가하기로 결정한 경우에 대비하여 실수로 '-'를 범위로 만들 수 있습니다. –

+0

"[^ \ w \. \ + \ - \ %]"로 줄일 수 있습니다. –

1

나는이 다양한 역할을 문자 클래스의 중간에 이스케이프 하이픈의 존재로 인해 예외 불법 문자 범위

을 얻고있다. 문자 클래스 안의 첫 번째 또는 마지막 위치에 이스케이프 처리되지 않은 하이픈을 배치 할 수 있습니다. 그렇지 않으면 이스케이프 처리해야합니다. 문자 클래스 내에서 DOT 또는 %을 탈출 할 필요가 없습니다

String regex = "[^\\w.+%-]"; 

:

String regex = "[^a-zA-Z0-9_.+%-]"; 

나 :

는이 정규식을 사용할 수 있습니다.