Skip to main content

[Java] 정규식 - (하이픈)은 범위지정자

정규식 Syntax Error

image.png


문제

에러나는 코드는 아래와 같다.

String[] splited = binomial.split("[+-*]");

자바에서 binomial.split("[+-*]") 이 부분은 조금 위험하다. 왜냐하면 -가 문자 클래스([]) 안에서 범위 지정 역할을 하기 때문이다.예를 들어, [+-*]는 자바 정규식에서 +, -, *를 의미하는 게 아니라 +부터 *까지의 범위(유니코드 순서상)를 의미할 수 있어서 예상과 다르게 동작할 수 있고 위 화면처럼 에러가 난다.


해결방법

-를 문자 클래스 안에서 문자 그대로 인식시키려면, 가장 앞이나 뒤에 놓거나, \\-로 이스케이프 해서 쓰면 된다.

String[] splited = binomial.split("[+\\-*]");

또는

String[] splited = binomial.split("[-+*]");

이렇게 하면 +, -, * 3가지 연산자를 정확히 분리할 수 있다.


정리

  • -는 문자 클래스 안에서 특수하니까 조심해야 한다.
  • split("[+\\-*]") 또는 split("[-+*]") 이렇게 쓰자
  • split("[+-*]")는 가급적 피하자

출처 : chatGPT