[Java] 자바에서 정규표현식 사용하기

수경·2023년 8월 31일
0
post-thumbnail

1. 검색 및 치환할 때 : replaceAll(), replaceFirst() 메소드 사용

2. 분리할 때 : split() 메소드 사용

3. 유효성 검사할 때 : Pattern, Matcher 클래스 사용

검색 및 치환할 때

  • replaceAll(), replaceFirst() 메소드 사용
		//게시판 > 개인정보 기재 불가하다고 가정(개인정보 마스킹 처리)
		String txt = "안녕하세요. 홍길동입니다. \n제 연락처는 010-1234-5678입니다.\n 제 메일은 hong@gmail.com입니다.\n 추가 연착처는 010-9876-5432입니다.";
		
        //전화번호 모두 마스킹 처리
		//replaceAll(String regex, String replacement)
		System.out.println(txt.replaceAll("010-[0-9]{3,4}-[0-9]{4}", "XXX-XXXX-XXXX"));
		
		//이메일 마스킹 처리
		System.out.println(txt.replaceFirst("\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}","OOOO@OOOO"));
		System.out.println();
		
        //전화번호 마스킹 후 이메일 마스킹 처리
		txt = txt.replaceAll("010-[0-9]{3,4}-[0-9]{4}", "XXX-XXXX-XXXX");
		txt = txt.replaceFirst("\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}","OOOO@OOOO");
		System.out.println(txt);

안녕하세요. 홍길동입니다.
제 연락처는 XXX-XXXX-XXXX입니다.
제 메일은 hong@gmail.com입니다.
추가 연착처는 XXX-XXXX-XXXX입니다.

안녕하세요. 홍길동입니다.
제 연락처는 010-1234-5678입니다.
제 메일은 OOOO@OOOO입니다.
추가 연착처는 010-9876-5432입니다.

안녕하세요. 홍길동입니다.
제 연락처는 XXX-XXXX-XXXX입니다.
제 메일은 OOOO@OOOO입니다.
추가 연착처는 XXX-XXXX-XXXX입니다.

분리할 때

  • split() 메소드 사용
		String name = "홍길동;아무개,,,,,하하하,테스트,이순신 에밀리";
		
        // , 또는 ; 또는 공백이 1글자 이상 일 때 분리
		String[] list = name.split("[,;\\s]{1,}");
		
		for (String item : list) {
			System.out.println(item);
		}

홍길동
아무개
하하하
테스트
이순신
에밀리

유효성 검사할 때

  • Pattern, Matcher 클래스 사용
        //1번과 2번 의미 동일
		//String regex = "[0-9]{3}-[0-9]{3,4}-[0-9]{4};		//1번
		String regex = "(\\d{3})-(\\d{3,4})-(\\d{4})";		//2번
        
        //정규 표현식 객체 생성하기
		//p1 = 정규 표현식 객체
        Pattern p1 = Pattern.compile(regex);
		
		//txt에서 p1의 패턴을 검색한다.
		Matcher m1 = p1.matcher(txt);
        
        //m1.find() : 검색 결과 유무 반환
        //			  출력횟수에 영향이 있다.	
        System.out.println(m1.find());	//true > 첫번째 : 010-1234-5678
		System.out.println(m1.find());	//true > 두번째 : 010-9876-5432
		System.out.println(m1.find());	//false
		System.out.println(m1.find());	//false
        
        //그룹화하여 찾기
        String regex = "(\\d{3})-(\\d{3,4})-(\\d{4})";
        //group(0) : (\\d{3})-(\\d{3,4})-(\\d{4})
		//group(1) : (\\d{3})
		//group(2) : (\\d{3,4})
		//group(3) : (\\d{4})
        while(m1.find()) {
			System.out.println("[전화번호 발견]");
			
			System.out.println("전화번호: " + m1.group(0));
			System.out.println("통신사: " + m1.group(1));
			System.out.println("앞자리: " + m1.group(2));
			System.out.println("뒷자리: " + m1.group(3));
			
			System.out.println();
		}
        

[전화번호 발견]
전화번호: 011-1234-5678
통신사: 011
앞자리: 1234
뒷자리: 5678

[전화번호 발견]
전화번호: 010-9876-5432
통신사: 010
앞자리: 9876
뒷자리: 5432

회원가입 시 자주 사용하는 정규표현식(유효성 검사)

  • 이름(한글) : "^[가-힣]{2,5}$"
  • 이메일 : "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"
  • 나이(18~100) : "^[0-9]{2,3}$" >> 범위는 조건문으로 검사한다.
  • 아이디(영어+숫자+ 조합) : "^[A-za-z][A-za-z0-9_]{4,11}$";
//^ : 시작조건 / $ : 끝나는 조건

		//1. 이름 > 필수, 한글, 2~5자 이내
		regex = "^[가-힣]{2,5}$";
		p1 = Pattern.compile(regex);
		m1 = p1.matcher(name);		//사용자가 입력한 이름에서 패턴 검색
		if (!m1.find()) {
			System.out.println("이름 > 필수, 한글, 2~5자 이내");
			
			return false;
		}
        
        //2. 이메일 > 필수, 이메일 형식
		regex = "^\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}$";
		p1 = Pattern.compile(regex);
		m1 = p1.matcher(email);		//사용자가 입력한 이름에서 패턴 검색
		
		if (!m1.find() || (Integer.parseInt(age) < 18 || Integer.parseInt(age) > 100)) {
			System.out.println("이메일 > 필수, 이메일 형식");
			
			return false;
		}
        
        //3. 나이 > 필수, 숫자, 18~100세
		//범위는 정규표현식에서 검사 불가능하다.
		regex = "^[0-9]{2,3}$";
		p1 = Pattern.compile(regex);
		m1 = p1.matcher(age);		//사용자가 입력한 이름에서 패턴 검색
		
		if (!m1.find()) {
			System.out.println("나이 > 필수, 숫자, 18~100세");
			
			return false;
		}
        
        //4. 아이디 > 필수, 영어+숫자+_ 조합 가능, 숫자로 시작 불가능, 4~12자 이내
		regex = "^[A-za-z_][A-za-z0-9_]{4,11}$";
		regex = "^[A-za-z_]\\w{4,12}$";
		
		p1 = Pattern.compile(regex);
		m1 = p1.matcher(id);		//사용자가 입력한 이름에서 패턴 검색
		
		if (!m1.find()) {
			System.out.println("아이디 > 필수, 영어+숫자+_ 조합 가능, 숫자로 시작 불가능, 4~12자 이내");
			return false;
		}
profile
웹백엔드개발자를 꿈꾸는

0개의 댓글