2010. 2. 15.

사칙연산 정규식(Regular Expression, Java)

안드로이드용 계산기 프로그램을 만들고 있습니다.
허접하지만 어느정도 구현이 되었구요.
계산기 프로그램을 만드는 중에 정규식을 쓸 일이 있었습니다.
정규식을 이용하면서 많은 공부가 되었습니다.


String s = "3+12X9-4/2";

정규식을 이용해서 String에서 숫자와 사칙연산 기호를 분리하려고 합니다.

처음에 썼던 방식은 다음과 같습니다.

String regExp = "[^0-9]";
String[] operands = s.split(regExp);

숫자가 아닌 것들을 구분자로 해서 operands에 3, 12, 9, 4, 2를 넣었습니다.


사실 사칙연산에서 쓰인 '+', '-', 'X', '/' 를 구분자로 하고 싶었는데 '-'가 문제가 되었습니다.

String regExp = "[+-X/]";

위에서 처럼 하면 '-'기호가 문제가 되어 파싱이 안되더군요.

escape 문제인가 싶어서

String regExp = "[+\-X/]";

위의 방법으로 해봤는데 역시나 안되었습니다.

한참을 고민하다가 다른 시도를 해봤는데

String regExp = "[+\\-X/]";
String[] operands = s.split(regExp);
위에 있는 정규식으로 하니 숫자만 파싱이 되더군요.

생각해보니 \\는 \로 인식이 되어서  \\-는 \-로 알아들을테니

'-'기호 문제가 해결되었습니다.

String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";

위에서처럼 해도 마찬가지로 파싱이 되었습니다.

============================<결론>=============================
String s = "3+12X9-4/2";
String regExp = "[^0-9]";
String[] operands = s.split(regExp);

위와 같이 하면 숫자만 파싱할 수 있다.
아래와 같은 정규식을 써도 숫자만 파싱할 수 있다.
String regExp = "[+\\-X/]";
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";

댓글 없음:

댓글 쓰기