코테에 나왔던거 복습하기.
1. 정규식이란?
텍스트 안에서 데이터를 찾을 때, 사용하는 서치 패턴
2. java 에서 정규식 사용하기
java.util.regex 패키지를 임포트해서 사용할 수 있다.
여기 안에는 Pattern (패턴 정의하는데 사용), Matcher (패턴 사용해 검색하는데 사용), PatternSyntaxExeption (syntax 에러에 사용) 클래스가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
3. 정규식 표현
서치패턴은 다양한 조건을 조합해서 만들 수 있다.
연습하면서 배워볼 수 있는 사이트
내가 만든 정규식으로 간단히 테스트하는 사이트
대표적인 규칙 몇 개만 소개하자면.
\d : 아무 숫자
\D : 아무 숫자 아닌 문자
[a-z] : a~z 까지 ,
1
abcd -> regex : [a-d]
[이거저거] : 이거저거만포함 <-> [^이거저거]
1
2
whyme (O) -> regex : [why]me , [^not]me (대신 이러면 callme도 걸림)
notme (X)
{m} : m번 반복
1
111345 -> 1{3}
^abc : abc로 시작하는 것
abc$ : abc로 끝나는 것
섞어서 쓰고 싶다면 쭉 나열해서 이으면 된다.
이렇게 말로만 하면 헷갈리니까 코테에 나왔었던 간단한 전화번호 검증을 예시로 하겠다.
4. 간단한 전화번호 검증
요구사항
허용되는 전화번호의 타입은 1) 010-0000-0000 2) 01000000000 3) +82-10-0000-0000 세가지이다.
풀이법
- 각 케이스 별로 정규식 짜기
- 010-0000-0000 : 숫자 개수로 판단.
+82-010-0000-0000 테스트 통과하지 않도록 앞에 숫자 3개로 시작함 조건 달아줬다.1
^(\d{3})-\d{4}-\d{4}
- 01000000000
1
\d{11}
- +82-10-0000-0000
1
^(\+82\-)\d{2}-\d{4}-\d{4}
- 010-0000-0000 : 숫자 개수로 판단.
- | (or) 로 연결
1
\d{11}|^(\+82\-)\d{2}-\d{4}-\d{4}|^(\d{3})-\d{4}-\d{4}
- 케이스 테스트
케이스 통과
케이스 실패