안녕하세요
이번 포스팅에서는 문자열의 규칙을 체크하는 정규표현식(Regular Expression)에 대해서 알아보겠습니다
정규표현식을 사용하면 if문 사용하여 복잡하게 문자열을 체크해야할 것은 간단하게 몇 줄만으로 문자열을 체크할 수 있습니다
목차
정규표현식(Regular Expression)이란?
Pattern 클래스 사용
Matcher 클래스
자주 사용되는 정규 표현식
개인 회원가입 검사 예제
정규표현식 문법
정규표현식(Regular Expression)이란?
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다
컴퓨터 과학의 정규 언어로부터 유래하였으며 현재 프로그래밍 언어에서 테스트 처리 프로그램, 텍스트 편집기 등에서 사용되고 있습니다
주로 전화번호, 이메일, 주민등록번호가 정상적으로 입력이 되었는지 검증을 할 경우 사용이 됩니다
이것을 if문을 짜려고 하면... 가독성 및 코드의 길이가 굉장히 길어질 것이지만 정규표현식으로 간단하게 구현이 가능합니다
Pattern 클래스 사용
정규 표현식의 Pattern클래스의 matchers()메서드를 사용하여 해당문자열이 패턴과 일치하는지 확인합니다
matches(String regex, CharSequence input)을 사용합니다
첫 번째 regex에는 패턴을 input에서는 검증할 문자열을 입력합니다
패턴과 일치하다면 true, 일치하지 않는다면 false를 리턴합니다
import java.util.regex.Pattern;
public class REExam1 {
public static void main(String[] args) {
String pt = "^[a-zA-Z]*$"; // 영어 체크
String str1 = "abcde";
String str2 = "12345";
boolean regex1 = Pattern.matches(pt, str1); // 검증1
boolean regex2 = Pattern.matches(pt, str2); // 검증1
System.out.println(regex1);
System.out.println(regex2);
}
}
위의 예제는 영어만 입력이 되었는지 패턴을 만들어 체크합니다
결과
Pattern 주요 메서드
메서드 | 설명 |
compile(String regex) | 정규표현식의 패턴을 작성합니다 |
matches(String regex, CharSequence input) | 정규표현식의 패턴과 문자열이 일치하는지 체크합니다 일치할 경우 true, 일치하지 않는 경우 false를 리턴합니다 |
Matcher 클래스
Mathcer 클래스는 문자열에 대해서 패턴과 일치하는지 체크할 때 사용합니다
Matcher 클래스는 Pattern 클래스와 비슷하지만 보다 더 많은 비교관련 메서드를 제공합니다
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class REExam2 {
public static void main(String[] args) {
Pattern pt = Pattern.compile("^[0-9]*$"); // 숫자 체크
String str1 = "12345";
String str2 = "abcde";
// Matcher 선언
Matcher matcher1 = pt.matcher(str1);
Matcher matcher2 = pt.matcher(str2);
// 결과 출력
System.out.println(matcher1.find());
System.out.println(matcher2.find());
}
}
위의 예제를 보시면 숫자만 입력되었는지 체크하면 프로그램을 구현하였습니다
결과
Matcher 주요 메서드
메서드 | 설명 |
matches() | 정규표현식의 패턴과 문자열이 일치하는지 체크합니다 일치할 경우 true, 일치하지 않는 경우 false를 리턴합니다 |
find() | 정규표현식의 패턴과 문자열이 일치하는지 체크합니다 그리고 그 위치로 이동합니다 일치할 경우 true, 일치하지 않는 경우 false를 리턴합니다 |
find(int start) | start위치부터 find() 작업을 수행합니다 |
group() | 매칭된 부분 중 첫 번째 그룹을 리턴합니다 |
group(int group) | 매칭된 부분중 group번째 그룹을 리턴합니다 |
groupCount() | 매칭된 group의 전체 갯수를 리턴합니다 |
자주 사용되는 정규 표현식
정규 표현식 | 설명 |
^[0-9]*$ | 숫자 |
^[a-zA-Z]*$ | 영문자 |
^[가-힣]*$ | 한글 |
\\w+@\\w+\\.\\w+(\\.\\w+)? | |
^\d{2,3}-\d{3,4}-\d{4}$ | 전화번호 |
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ | 휴대전화번호 |
\d{6} \- [1-4]\d{6} | 주민등록번호 |
^\d{3}-\d{2}$ | 우편번호 |
프로그램을 만들다보면 자주 사용되는 정규 표현식입니다
출처 : https://coding-factory.tistory.com/529
개인 회원가입 검사 예제
import java.util.regex.Pattern;
public class REExam3 {
public static void main(String[] args) {
String name = "홍길동";
String telephone = "010-1111-1111";
String email = "naver@naver.com";
// 패턴 검사
boolean name_pt = Pattern.matches("^[가-힣]*$", name);
boolean telephone_pt = Pattern.matches("^01(?:0|1|[6-9])-(?:\\d{3}|\\d{4})-\\d{4}$", telephone);
boolean email_pt = Pattern.matches("\\w+@\\w+\\.\\w+(\\.\\w+)?", email);
// 출력
System.out.println("이름 체크 : " + name_pt);
System.out.println("전화번호 체크 : " + telephone_pt);
System.out.println("이메일 체크 : " + email_pt);
}
}
Pattern클래스의 matches를 사용하여 회원정보를 체크하는 예제입니다
상단의 자주 사용되는 정규 표현식을 참고하여 구현하시면 편하게 구현이 가능하실겁니다!
결과
정규표현식 문법
정규 표현식 | 설명 |
^ | 문자열 시작 |
$ | 문자열 종료 |
. | 임의의 한 문자(단 \은 넣을 수 없음) |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나 있음 |
[ ] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다. |
{ } | 횟수 또는 범위를 나타냅니다. |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행할 때 사용 |
\ | 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미) |
\b | 단어의 경계 |
\B | 단어가 아닌것에 대한 경계 |
\A | 입력의 시작 부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자 [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
(?i) | 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다. |
여기까지 자바의 정규표현식에 대해서 알아봤습니다
자바를 공부하는 분들께 도움이 되었으면 좋겠습니다
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 이클립스 테마 적용하기(DevStyle) (0) | 2021.06.19 |
---|---|
[JAVA] 정규표현식(Regular Expression)의 ?: 역할 (0) | 2021.05.28 |
[JAVA] 숫자타입의 최소범위, 최대범위를 구하는 법(MAX_VALUE, MIN_VALUE) (0) | 2021.05.28 |
[JAVA] 제곱근(루트) 구하기 Math.sqrt() 개념 및 사용법 정리 (0) | 2021.05.27 |
[JAVA] 난수(랜덤 숫자) 생성 방법(Math.random, Random) (0) | 2021.05.27 |