본문 바로가기
Java

Illegal group reference 문제 해결 , 원인 replaceAll 매개변수

by nomore7 2013. 11. 12.


replaceAll함수에서 예상치 못한 아래와 같은 오류가 발생했다.


Illegal group reference 


원인을 모르던 중..API 를 확인한 결과..





예상외로 replaceAll 함수는 첫번째 매개변수를 두번째 매개변수로 모두 바꿔준다가 아니라,


첫번째 매개변수의 정규식에 해당하는 스트링을 두번째 매개변수로 바꿔준다 였다.


그리고 친절하게 대처 할 수 있는 방법도 알려줬다.

java.util.regex.Matcher.quoteReplacement(String) 이라는 함수를 이용하면,replaceAll 함수에 적용할 수 있는 String을 리턴한다.


나의 경우에는 $라는 문자가 있어서 문제가 되었는데, 이함수를 이용해 간단하게 해결했다.


그리고 이와는 별개로 다른 방법도 찾게 되었다.

직접 해당 $ 문자를 변경하는 방법인데 두방법 모두 잘 작동하였다.


예제1

public static void main (String args[]){

String main_string = "###UserPassword###1###UserPassword###2###UserPassword###3###UserPassword###4###UserPassword###5###UserPassword###6###UserPassword###";

String test_string = "tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'\"";

System.out.println("변경 전 test_string"  + test_string);

test_string = java.util.regex.Matcher.quoteReplacement(test_string);

System.out.println("변경 후 test_string"  + test_string);

main_string = main_string.replaceAll("###UserPassword###", test_string);

System.out.println("replaceAll 결과 :"+main_string);

 

return;

}


예제2


public static void main (String args[]){

String main_string = "###UserPassword###1###UserPassword###2###UserPassword###3###UserPassword###4###UserPassword###5###UserPassword###6###UserPassword###";

String test_string = "tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'\"";

System.out.println("변경 전 test_string"  + test_string);

test_string = test_string.replaceAll("[$]", "\\\\\\$"); 

System.out.println("변경 후 test_string"  + test_string);

main_string = main_string.replaceAll("###UserPassword###", test_string);

System.out.println("replaceAll 결과 :"+main_string);

 

return;

}




출력값

변경 전 test_stringtester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"

변경 후 test_stringtester123`~!@#\$%^&*()-_=+[{]}|;:,<.>/?'"

replaceAll 결과 :tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"1tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"2tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"3tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"4tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"5tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"6tester123`~!@#$%^&*()-_=+[{]}|;:,<.>/?'"





둘다 결과값은 같았다.