[Java] 정규 표현식과 Pattern 클래스
by coco3o정규 표현식(Regular Expression)
정규표현식은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리할 수 있도록 하는 수단이다.
예를들어, 전화번호, 주민등록번호, 이메일 등과 같이 정해져있는 형식이 있고 사용자가 그 형식대로 제대로 입력했는지 검증해야 할 때 정규표현식과 비교한다.
자주 사용하는 정규 표현식의 기호
기호 | 설명 | ||
[ ] | 한 개의 문자 | [abc] | a, b, c 중 하나의 문자 |
[^abc] | a, b, c 이외의 하나의 문자 | ||
[a-zA-Z] | a~z, A~Z 중 하나의 문자 | ||
\d | 한 개의 숫자, [0-9]와 동일 | ||
\s | 공백 | ||
\w | 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일 | ||
? | 없음 또는 한 개 | ||
* | 없음 또는 한 개 이상 | ||
+ | 한 개 이상 | ||
{n} | 정확히 n개 | ||
{n,} | 최소한 n개 | ||
{n,m} | n개부터 m개까지 | ||
( ) | 그룹핑 |
다음은 02-123-4567 또는 010-1234-5678과 같은 전화번호를 위한 정규 표현식이다.
(02|010)-\d{3,4}-\d{4}
(02|010) : 02 또는 010
- : - 포함
\d{3,4} : 3자리 또는 4자리 숫자
- : - 포함
\d{4} : 4자리 숫자
다음은 coco@naver.com과 같은 이메일을 위한 정규 표현식이다.
\w+@\w+\. \w+(\. \w+)?
\w+ : 한 개 이상의 알파벳 또는 숫자
@ : @
\w+ : 한 개 이상의 알파벳 또는 숫자
\. : .
\w + : 한 개 이상의 알파벳 또는 숫자
(\. \w+)? : \. \w+이 없거나 한 번 더 올 수 있음
주의할 점은 \.과 .은 다르다.
\.은 문자로서의 점(.)을 말하지만 .은 모든 문자 중 한 개의 문자를 뜻한다.
Pattern 클래스
정규 표현식으로 문자열을 검증하는 기능은 java.util.regex.Pattern 클래스의 정적메소드인 matches() 메소드가 제공한다.
boolean result = Pattern.matches("정규식", "검증할 문자열");
다음은 정규 표현식의 간단한 예제이다.
public class PatternExample {
public static void main(String[] args) {
String regExp = "(02|010)-\\d{3,4}-\\d{4}";
String data = "010-123-4567";
boolean result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다.");
}else {
System.out.println("정규식과 일치하지 않습니다.");
}
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "coco@navercom";
result = Pattern.matches(regExp, data);
if(result) {
System.out.println("정규식과 일치합니다.");
}else {
System.out.println("정규식과 일치하지 않습니다.");
}
}
}
정규식과 일치합니다.
정규식과 일치하지 않습니다.
Process finished with exit code 0
이메일 검증에서 일치하지 않는 이유는 navercom이라고 되어있기 때문이다. 반드시 점(.)과 한 개 이상의 알파벳 또는 숫자가 포함되어야 하므로 naver.com이라고 해야 맞다.
reference : 이것이 자바다 11장 기본 API 클래스
'🌈Programming > Java' 카테고리의 다른 글
[Java] 자바 컬렉션 프레임워크(List, Set, Map) (0) | 2021.05.10 |
---|---|
[Java] 현재 날짜, 시간 구하기 (SimpleDateFormat, DateTimeFormatter) (2) | 2021.05.01 |
온라인 자바 스터디 # 15 - 람다식 (0) | 2021.03.04 |
온라인 자바 스터디 #14 - 제네릭(Generic) (0) | 2021.02.25 |
온라인 자바 스터디 #13 - I/O 입출력 스트림 (0) | 2021.02.16 |
블로그의 정보
슬기로운 개발생활
coco3o