[오류노트] PatternSyntaxException: UnExpected internal error near index 1

2023. 9. 18. 10:26오류노트/웹

public static String fileNameReplace(String value)
{
  String returnValue = value;
  returnValue = returnValue.replaceAll("/","");
  returnValue = returnValue.replaceAll("\\","");		//여기서 에러발생
  returnValue = returnValue.replaceAll("\\.\\.","");
  returnValue = returnValue.replaceAll("&","");

}

첨부 파일을 다운로드 하는 로직 중

시큐어 코딩을 위해 파일 명에서 replace All 하는 부분에서 위와 같은 에러가 발생하였습니다.

 

 

에러는 

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \

 

의 에러가 발생했는데.

 

위의 코드에서 원인은  returnValue.replaceAll("₩₩",""); 부분이였습니다.

 

 

자바 정규식에서는 ₩₩를 \로 인식합니다.

 

정규식에 사용되는 특수문자 (*,.| 등) 을 문자열로 replace 할때는 ₩₩. 와 같이 사용하여서 

 

₩₩. => ₩.  와 같이 인식되게 하여 특수 문자를 인식할 수 있습니다.

 

 

 

 

이와 마찬가지로 

returnValue.replaceAll("\\","");

위와 같은 코드는 \\를 ₩로 인식하기 때문에  에러가 발생합니다.

returnValue.replaceAll("\",""); 

실제로 위처럼 쓰면 ₩는 "를 문자열로 나타내게해 "가 안닫힌것처럼 인식되어서 에러가 발생하진 않지만 내부적으로 

 

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \

 

위와같은 에러가 발생하는 듯 합니다.

 

이를 해결하기위하여

 

₩₩ -> ₩₩₩₩  ->

 

위처럼 변경해주면  (₩뒤를치환해라)(₩) 와 같은의미로 ₩₩로 인식하기 때문에 정상동작합니다.

 

 

returnValue.replaceAll("\\\\","");    //  문자열 ₩ 를 의미함

 

해당부분을 위처럼 수정해주시면 됩니다.

 

 

 

 

반응형