정규표현식 regex ;
정규표현식 이란?
=>문자열이 정해진 패턴으로 구성되어 있는지 검증해야 할 때, 사용한다.
ex) 이메일 , 전화번호 ;
\ , () , ? , * , + , {n} , {m, } , {m,n}

. [] [^] ^ $ ( ) \w \W \s \S \d \D

자주 쓰는 패턴!!
\\d{3} => 연속된 숫자 3개를 찾음
\\w => '_' 와 영문자와 숫자 1개를 찾음
\\w+ => 문자 여러개
[0-9] -> 0-9 사이 숫자를 하나 찾음
[a-z] -> a-z 사이 소문자를 하나 찾음
[A-Z] -> A-Z 사이 대문자를 하나 찾음
\\. \\[ \\? => .[? 등 특정 문자를 찾
정규표현식의 주요 메소드와 설명

Pattern 클래스와 Matcher 클래스

기본사용법 -> Pattern p = Pattern.compile(pattern);
->Matcher m = p.matcher(info);
정규표현식 예제
public class RegexEx01 {
public static void main(String[] args) {
/*
* [0-9] - 숫자0~9 1개
* [a-z] - 소문자a~z 1개
* [0-9a-zA-Z] - 숫자 알파벳 1개
* [가-힣] - 한글 1개
*
* ? 0번 또는 1번
* * 0번이상 나옴
* + 1번이상 나옴
*
* [0-9]? = 숫자가 안나오거나 1번 나온다
* [0-9]{3} = 숫자가 정확히 3번 나온다
* [0-9]{3,4} = 숫자가 3이상 4이하 나온다
* [0-9]{3, } = 숫자가 3이상 나온다
*
* \\특수문자 - 정규표현식에서 사용하는 특수문자를 문자로 나타내고 싶은경우
* \\w - _이거나 영문자
* \\W - 반대
*
* \\d - 숫자
* \\D - 숫자의 반대
*
* () 값들의 집합
*/
//여기에서 정확히 전화번호 형식만 찾아봄
String info = "30세/서울시 강남구/02-123-4567/010-1234-5678/aaa@naver.com";
//String pattern = "[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}";
String pattern = "\\d{2,3}-\\d{3,4}-\\d{4}";
//정규표현식을 적용
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(info);
//find(), group(), start(), end()
while(m.find()) {
System.out.println("찾았다");
System.out.println("찾은문자:" + m.group() );
System.out.println("시작위치:" + m.start() );
System.out.println("끝위치:" + m.end() );
}
System.out.println("---------------------------------------");
//이메일형식
//String pattern2 = "[a-zA-Z0-9]+@[a-z]+\\.[a-z]+"; //^$ 시작끝을 나타내는데 생략이 가능함
String pattern2 = "\\w+@\\w+\\.\\w+";
Matcher m2 = Pattern.compile(pattern2).matcher(info);
while(m2.find()) {
System.out.println(m2.group());
}
}
}

정규표현식 예제2

매개변수가 정규표현식(regex)인 메소드 사용법
public class RegexEx02 {
public static void main(String[] args) {
//주민번호 패턴을 찾아서 마스킹처리하기
String info = "홍길당,30세,강남구,123123-1231231";
String pattern = "[0-9]{6}-[0-9]{7}";
//매개변수가 regex인 메서드는 정규표현식 패턴을 적용할 수 있다는 의미입니다
String result = info.replaceAll(pattern, "******-*******");
System.out.println(result);
}
}