정규식 (Regex = Regular Expression)
문자열 형식을 검사하는 정해진 패턴 방식
기본 기호
`.` | 임의의 문자 |
`^` | 문자열 시작 |
`$` | 문자열 끝 |
문자 클래스
`[]` | 범위 지정 |
`-` | 범위 생략 |
수량자
`*` | 0번 이상 반복 |
`+` | 1번 이상 반복 |
`?` | 0번 또는 1번 반복 |
`{n}` | 앞의 패턴을 n번 반복 |
`{n,m}` | 앞의 패턴을 n에서 m번 반복 |
`{n,}` | 앞의 패턴을 n번 이상 반복 |
기타 메타 문자
`|` | ~ 중 하나 |
`()` | 캡쳐 그룹 |
`(?:...)` | 비캡쳐 그룹 - 검사는 하지만, 결과를 참조하거나 추출 불가 |
기본 특수 문자
`\` | 이스케이프 문자 |
후행 탐색
`(?=...)` | 긍정 탐색 (Positive Lookahead) - 해당 패턴 뒤에 오는 문자열 반드시 포함 |
`(?!...)` | 부정 탐색 (Negative Lookahead) - 해당 패턴 뒤에 오는 문자열 반드시 제외 |
최소 반복 (non-greedy match)
`.*?` | 문자 0개 이상을 최소한으로 반복해서 매칭 |
정규식 예제
전화번호 검사
String phone = "01012345678";
String regex = "^010[1-9][0-9]{7}$";
System.out.println(phone.matches(regex));
아이디 검사
String id = "testuser1";
String regex = "^[a-z][a-z0-9\\-_]{4,19}$";
System.out.println(id.matches(regex));
닉네임 검사
String nickname = "테스트운영자";
String regex = "^(?!.*?운영자)[가-힣][가-힣0-9]{1,9}$";
System.out.println(nickname.matches(regex));
생년월일 검사
String birth = "2001-02-29";
String yearValue = birth.substring(0, 4);
int year = Integer.parseInt(yearValue);
boolean leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
String regex;
if(leap)
regex = "^(19[0-9]{2}|20[0-9]{2})-((02-(0[1-9]|1[0-9]|2[0-9]))|((0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30))|((0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[01])))$";
else
regex = "^(19[0-9]{2}|20[0-9]{2})-((02-(0[1-9]|1[0-9]|2[0-8]))|((0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30))|((0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[01])))$";
System.out.println(birth.matches(regex));
비밀번호 검사
String password = "Testuser1!";
String regex = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$])[A-Za-z0-9!@#$]{8,16}$";
System.out.println(password.matches(regex));
유용한 사이트
Regexper
regexper.com
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
'Java > 기본' 카테고리의 다른 글
[Java / 기본] 예외 처리 (0) | 2024.12.25 |
---|---|
[Java / 기본] Wrapper (0) | 2024.12.25 |
[Java / 기본] 문자열 (1) | 2024.12.24 |
[Java / 기본] 문자 (6) | 2024.12.23 |
[Java / 기본] Object (1) | 2024.12.23 |