2015-01-19 3 views
2

문자열에 -, 일부 자릿수, {, 아무것도 포함되어 있지 않은지 확인하기 위해 정규 표현식을 만들려고합니다./일부 문자 시퀀스, }, 일부 자릿수 및 최종 -. 예를 들어 :Java : PatternSyntaxException이 정규식으로 throw 됨 * - \ d + {. *} \ d + -. *

gibberish-345{randomtext}938475-moregibberish 

^&*^%^asdf-9897689{symbols$%&*}456-h6 

-456{}456- 

나는 String.matches("*-\\d+{.*}\\d+-.*")String.matches("*-[\\d]+{.*}[\\d]+-.*")를 사용하여 시도했지만, 각각의 경우에 나는이 PatternSyntaxException (둘 다 아래에 있습니다) 수 :

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 5 
.*-\d+{.*}\d+-.* 
^ 
at java.util.regex.Pattern.error(Unknown Source) 
at java.util.regex.Pattern.closure(Unknown Source) 
at java.util.regex.Pattern.sequence(Unknown Source) 
at java.util.regex.Pattern.expr(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.util.regex.Pattern.<init>(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.util.regex.Pattern.matches(Unknown Source) 
at java.lang.String.matches(Unknown Source) 
at conv.Congine.qual(Congine.java:17) 
at conv.Congine.convert(Congine.java:5) 
at conv.Main.main(Main.java:6) 

~ 

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 7 
.*-[\d]+{.*}[\d]+-.* 
^
at java.util.regex.Pattern.error(Unknown Source) 
at java.util.regex.Pattern.closure(Unknown Source) 
at java.util.regex.Pattern.sequence(Unknown Source) 
at java.util.regex.Pattern.expr(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.util.regex.Pattern.<init>(Unknown Source) 
at java.util.regex.Pattern.compile(Unknown Source) 
at java.util.regex.Pattern.matches(Unknown Source) 
at java.lang.String.matches(Unknown Source) 
at conv.Congine.qual(Congine.java:17) 
at conv.Congine.convert(Congine.java:5) 
at conv.Main.main(Main.java:6) 

나는 정규식 기호를 사용하고 그 I 돈 내가 쓰고 있다는 걸 알지 못해? 나는 분명히 ... {을 내 자신의 질문에 대답 할 수 및 }특수을처럼

+0

방금'\\ D +를'봤어, 괄호없이? – chrylis

답변

0

패턴은

.*-\\d+\\{.*\\}\\d+-.* 
2

것 같습니다 ... {또는}는 정규식 기호 자격 - 나는 확인했지만, 나는 생각하지 않습니다 문자를 정규식에 넣으려면 \\으로 이스케이프 처리해야합니다. 오 잘.

+0

오, 나는 그것을 알아 채지 못했습니다 ... 그렇습니다. – chrylis

0
String.matches("*-\\d+\\{.*}\\d+-.*"); 

그것은 + 기호 옆에 주로 있기 때문에 { 성격의이어야한다. 우리는 모두, 정규 표현식에서 +은 이전 토큰을 한 번 이상 반복합니다. 반복 수량 한정자 {start,end}{} 중괄호 안의 주어진 범위에 따라 이전 토큰을 반복합니다. 따라서 정규 표현식 엔진은 {을 반복 수량 한정자의 시작으로 간주하고 {이 실패하기 전에 +을 고려합니다. o+{2}을 지정할 수는 없지만 (o+){2}을 지정합니다. 또한 닫는 중괄호를 벗어날 필요가 없습니다.

0

패턴은 다음과 같습니다

^.*[-]\\d+\\{.*\\}\\d+[-].*$ 

감사합니다,