2009-06-05 1 views
0

정규식에 동일한 코드의 2 개의 다른 출력이 있지만 ... 무엇이 잘못되었는지를 알지 못합니다. 여기에 코드가 있습니다. 저를 도울 수 있기를 바랍니다. 감사!자바 버그? 2 개의 동일 정규식에 대한 다른 출력

String s = "48° 18′ 13,94″ nördliche Breite, " 
     + "11° 34′ 31,98″ östliche Länge"; 

String kommazahl = "[0-9]{1,2}([\\.,][0-9]+)?"; 
String zahl = "[0-9]{1,2}"; 

Pattern p1 = Pattern.compile("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*" 
          +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*"); 

Matcher m1 = p1.matcher(s); 

System.out.println(m1.group(1) + "\n" + m1.group(5)); 

// Output should be: 
// 48° 18′ 13,94 
// 11° 34′ 31,98 

// Output is: 
// 48° 18′ 13,94 
// 1° 34′ 31,98 
+8

왜 많은 사람들이 자신의 코드를보다 면밀히 검사하지 않고 언어의 버그로 생각합니까? –

+0

zahl은 잘못된 것 같습니다. -도는 3 자리 숫자를 가질 수 있습니다. 그건 당신의 문제와 관련이 없으며 단지 버그 일뿐입니다. –

+3

질문에 태그를 지정할 때 제안 메시지에주의하십시오. 이름 뒤에 10보다 작은 숫자를 가진 태그는 _ _ _입니다. –

답변

5

.*은 나머지 패턴을 일치시키는 동안 탐욕스러운 11의 첫 번째 1과 일치합니다. 과 같은 것으로 .*을 대체하십시오.

+0

감사합니다. 괜찮습니다. –

4

문제는 패턴의 첫 번째 줄 끝에. *가 표시됩니다. 그것은 탐욕스럽게 "nördliche Breite, 1"과 일치합니다.

아마도 ". *"를 캡처하여 멈출 때를 알 수 있도록 변경해야할까요?

Pattern p1 = Pattern.compile 
    ("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*, " 
    +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*"); 

물론 데이터의 나머지 부분에서 원하는 두 값 사이에 항상 "쉼표 공백"이있는 경우에만 작동합니다.

관련 문제