본문 바로가기
Programming/Java

[JAVA] 정규표현식

by 공부합시다홍아 2024. 2. 26.

정규표현식

정규표현식이란, 문자열이 정해진 패턴으로 구성되어 있는지 검증해야할 때, 사용한다. 


Pattern 클래스 
  • Java.util Pakage의 Pattern 클래스의 matcher(), matchers() 메서드를 정규표현식 검증에 이용한다. 
static 메서드 
1. compile(패턴) : 정규 표현 엔진(정규식)을 만들어 낸다.
2. matcher(검증 데이터) : 데이터를 비교해서 Matcher 클래스로 반환한다.
3. matchers(패턴, 검증 데이터) : 패턴으로 비교하여 boolean 형으로 반환한다. 

Matcher 클래스 
  • find() : 해당 정규 표현을 찾아냄
  • start() : 해당 정규표현의 시작 인덱스를 반환한다.
  • group() : 해당 정규표현의 값을 반환한다.
  • end() : 해당 정규표현식의 끝 인덱스를 반환한다.

 

package api.regex.basic;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

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());
		}
			
	}
}


package api.regex.basic;

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);

	}
}


그 밖에 자주 이용되는 패턴 
  • \\d{3} : 연속된 숫자 3개를 찾는다.
  • \\w : 문자를 찾는다.
  • \\w+ : 문자 여러 개를 찾는다.
  • [0-9] : 0-9사이의 문자를 찾는다.
  • [a-z] : a-z사이의 문자를 찾는다.
  • \\. \\[ \\? : . [ ? 등 특정 문자를 찾는다.
728x90