자바나 안드로이드 자바에서 개발시에 입력값들을 검사해야 하는 경우가 있다.
이러한 경우 정규표현식을 사용하여 처리할 수 있다.
java.util.regex 패키지에 있는 Match클래스와 Pattern클래스를 사용하여 문자열을 구분할 수 있다.
주요 메소드는
Pattern.match(정규표현식, 대상 문자열);
인데, 아래의 예를 확인해보자.

정규표현식 기본 문법
^ : 문자열의 시작을 나타냄
$ : 문자열의 종료를 나타냄
. : 임의의 한문자를 나타냄
I : or를 나타냄
[] : 문자열 클래스 지정시 사용
\w : 알파벳이나 숫자
\W : 알파벳이나 숫자를 제외한 문자
\d : 숫자 [0-9]와 동일
기본 정규표현식
- 한글만 구분
(1) 정규식 :^[ㄱ-ㅎ가-힣]*$
(2) 메소드 : boolean a = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", "비교문자");
(3) 예 : boolean a = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", "가지");
-> "가지"는 한글이므로 a에 true값 리턴됨
- 영문 (대소문자 구분)
(1) 정규식 : ^[a-zA-Z]*$
(2) 메소드 : boolean b = Pattern.matches("^[a-zA-Z]*$", "비교문자");
(3) 예 : boolean b = Pattern.matches("^[a-zA-Z]*$", "Felix");
-> Felix는 영문이므로 b에 true값 리턴됨
- 영어소문자
(1) 정규식: ^[a-z]*$
(2) 메소드 : boolean c = Pattern.matches("^[a-z]*$", "비교문자");
- 숫자
(1) 정규식 : ^[0-9]*$
(2) 메소드 : boolean c = Pattern.matches("^[0-9]*$", "비교문자");
- 한글과 숫자
(1) 정규식 : ^[ㄱ-ㅎ가-힣0-9]*$
(2) 메소드 : boolean c = Pattern.matches("^[ㄱ-ㅎ가-힣0-9]*$", "비교문자");
응용 정규 표현식
- 이메일 : 아이디@도메인 형식
정규식 : [0-9a-zA-Z]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$
- 주민번호 : 첫글자가 1~4인지 검사, "-" 허용안함
정규식 : ^\\d{6}[1-4]\\d{6}
- 전화번호 : 연결부는 "-"로 구분되어있음
정규식 : ^\\d{2,3}\\d{3,4}\\d{4}$
- 핸드폰번호 : 010, 016~019 사이를 충족해야함, "-" 허용안함
정규식 : ^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$
- IP주소
정규식 ; ([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})
# 참고 : IP가 IPv4형식이라면 정규식 말고 아래의 메소드를 사용할 수도 있음
public static final boolean checkIPv4(final String ip) {
boolean isIPv4;
try {
final InetAddress inet = InetAddress.getByName(ip);
isIPv4 = inet.getHostAddress().equals(ip)
&& inet instanceof Inet4Address;
} catch (final UnknownHostException e) {
isIPv4 = false;
}
return isIPv4;
}
출처 :
https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
'Backend > JAVA' 카테고리의 다른 글
[JAVA] Thread와 Runnable (0) | 2023.02.05 |
---|---|
[JAVA] synchronized 동기화 (0) | 2023.02.02 |
[JAVA] try-with-resources란? (0) | 2023.01.31 |
[JAVA] 인터페이스와 추상 클래스의 객체 생성은 불가능? (0) | 2022.10.19 |
[JAVA] 람다의 사용법 & 세부사항 (0) | 2022.10.18 |