개념 : 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 언어형식.
전화번호, 주민등록번호, 이메일 등과 같이 정해져있는 형식이 있고 사용자가 그 형식대로 제대로 입력했는지 검증을 해야 하는 경우가 종종 있다. 이런 입력값을 정해진 형식에 맞는지 검증해야 할 때에는 정규표현식을 사용하면 쉽게 구현할 수 있다.
Pattern 클래스
정규표현식에 대상 문자열을 검증하는 기능은 Pattern 클래스의 matches() 메소드를 활용하여 검증할 수 있다. matches() 메소드의 첫번째 매개값은 정규표현식이고 두번째 매개값은 검증 대상 문자열이다. 검증 후 대상문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false값을 리턴한다.
package regular;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String pattern ="^[0-9]*$";
String val = "234890234820";
boolean regex = Pattern.matches(pattern, val);
System.out.println(regex);
}
}
ㄱ

위 예제는 대상문자열이 숫자인지 아닌지 검증하는 예제이다.
Pattern 클래스 주요 메소드
compile(String regex) : 주어진 정규표현식으로부터 패턴을 만든다.
matcher(CharSequence input) : 대상문자열이 패턴과 일치할경우 true
asPredicate() : 문자열을 일치시키는 데 사용할 수 있는 술어를 작성한다.
pattern() : 컴파일된 정규표현식을 String형태로 반환한다.
split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리한다.
Matcher 클래스
Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다.
Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원받을 수 있다. Matcher객체는 Pattern 객체의 matcher() 메소드를 호출하여 받아올 수 있다.
package regular;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample01 {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("^[a-zA-Z]*$");
String val = "asdkfj";
Matcher matcher = pattern.matcher(val);
System.out.println(matcher.find());
}
}

Matcher 클래스의 find() 메소드를 활용하여 대상문자열이 영문자인지 검증하는 예제.
유효성 검사
package regular;
import java.util.regex.Pattern;
public class RegexExample02 {
public static void main(String[] args) {
String name = "김카프";
String tel = "010-1234-4833";
String email = "test@naver.com";
// 유효성 검사
boolean name_check = Pattern.matches("^[가-힣]*$", name);
boolean tel_check = Pattern.matches("^01(?:0|1|[6-9])-(?:\\d{4})-\\d{4}$", tel);
boolean email_check = Pattern.matches("\\w+@\\w+\\.\\w+(\\.\\w+)?", email);
// 출력
System.out.println("이름 : " + name_check);
System.out.println("전화번호 : " + tel_check);
System.out.println("이메일 : " + email_check);
}
}

출처:
coding-factory.tistory.com/529
[Java] 자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제
정규표현식(Regular Expression)이란 컴퓨터 과학의 정규언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 입니다. 개발을 하다보면 전화번호, 주민등
coding-factory.tistory.com
| ^ | 문자열 시작 |
| $ | 문자열 종료 |
| . | 임의의 한 문자(단 \은 넣을 수 없음) |
| * | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
| + | 앞 문자가 하나 이상 |
| ? | 앞 문자가 없거나 하나 있음 |
| [ ] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다. |
| { } | 횟수 또는 범위를 나타냅니다. |
| ( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | | 패턴 안에서 or 연산을 수행할 때 사용 |
| \ | 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미) |
| \b | 단어의 경계 |
| \B | 단어가 아닌것에 대한 경계 |
| \A | 입력의 시작 부분 |
| \G | 이전 매치의 끝 |
| \Z | 입력의 끝이지만 종결자가 있는 경우 |
| \z | 입력의 끝 |
| \s | 공백 문자 |
| \S | 공백 문자가 아닌 나머지 문자 |
| \w | 알파벳이나 숫자 |
| \W | 알파벳이나 숫자를 제외한 문자 |
| \d | 숫자 [0-9]와 동일 |
| \D | 숫자를 제외한 모든 문자 |
| (?i) | 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다. |
자주 사용하는 정규 표현식
| 정규 표현식 | 설명 |
| ^[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}$ | 우편번호 |
'자바' 카테고리의 다른 글
| 영속성 (0) | 2020.11.12 |
|---|---|
| reflection (0) | 2020.11.11 |
| synchronized (0) | 2020.11.09 |
| 람다 (0) | 2020.11.09 |
| java의 .properties 파일 읽기 (0) | 2020.11.09 |