정규표현식

woom·2022년 11월 23일
0

JAVA

목록 보기
16/18
post-thumbnail

🌼 정규표현식

  • 정규표현식(Regular Expression) : 메타문자(Meta Character), 회피문자(Escape Character) 등을 이용하여 일정한 규칙의 문자열을 표현하는 방법 (입력값에 대한 검증)

📙 메타문자

  • ^문자 : 문자(열)로 시작됨을 의미

  • 문자$ : 문자(열)로 종료됨을 의미

  • . : 임의의 문자 하나를 의미( \문자 표현 불가능)

  • [문자1문자2문자3] : 나열된 문자들 중 하나를 의미

  • [^문자1문자2문자3] : 나열된 문자들이 아닌 문자 중 하나를 의미(대괄호안에서^는 부정)

  • [문자1-문자2] : 문자1 부터 문자2 범위의 문자 중 하나를 의미

  • 문자열1|문자열2|문자열3 : 나열된 문자열들 중 하나를 의미

  • 문자열+ : 문자열이 한번이상 반복됨을 의미

  • 문자열* : 문자열이 0번이상 반복됨을 의미

  • 문자열? : 문자열이 0번 또는 1번 존재함을 의미

  • 문자열{숫자} : 문자열이 숫자만큼 반복됨을 의미

  • 문자열{숫자1,숫자2} : 문자열이 숫자1부터 숫자2 범위만큼 반복됨을 의미

  • (?!)문자열 : 문자열에서 대소문자를 구분하지 않음을 의미

  • (?=문자열) : 문자열이 반드시 포함됨을 의미

  • (!=문자열) : 문자열이 반드시 포함되지 않음을 의미

.* 임의의 어떤 문자열이 0번이상 반복됨을 의미


📙 회피문자

  • \s : 공백이 있는 문자열을 의미

  • \S : 공백이 없는 문자열을 의미

  • \w : 영문자, 숫자, 특수문자(_)의 문자로만 구성된 문자열을 의미

  • \W : 영문자, 숫자, 특수문자(_)를 제외한 문자로 구성된 문자열을 의미

  • \d : 숫자 형태의 문자로만 구성된 문자열을 의미

  • \D : 숫자 형태의 문자로만 구성되지 않은 문자열을 의미

  • \메타문자 : 메타문자를 일반문자로 표현함을 의미 ex) . : 문자.


📒 Pattern 클래스

  • 정규표현식을 이용하기 위한 기능을 제공하는 클래스

  • Pattern.matches(String regex, CharSequence input) : 정규표현식과 입력값을 전달받아 입력값이 정규표현식의 규칙과 다른 경우 [false]를 반환하고 동일한 경우 [true]를 반환하는 메소드


🐣 예제

  • 키보드로 사용자에게 값을 입력받아 형식에 맞는 값을 비교하여 출력하는 프로그램
    (비정상적인 값을 입력한 경우 에러메세지를 출력하고 프로그램 종료)

  • 아이디 입력규칙 : 영문자로 시작되며 영문자,숫자,특수문자(_)의 조합으로 6~20 범위의 문자수 입력

  • 비밀번호 입력규칙 : 영문자, 숫자, 특수문자가 반드시 1개 이상 포함되며 8~30 범위의 문자수로 입력

  • 이메일 입력규칙 : [아이디@도메인] 형식으로 입력


public class RegularExpressionApp {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("아이디를 입력해 주세요. >> ");
		String id=scanner.nextLine();
		
		if(id==null || id.equals("")) {//사용자 입력값이 없는 경우
			System.out.println("[에러]아이디를 반드시 입력해 주세요.");
			System.exit(0);
		}
		
		//아이디 관련 정규표현식 저장
		String idReg="^[a-zA-Z][a-zA-Z0-9_]{5,19}$";
		String idReg="^[a-zA-Z]\\w{5,19}$";//회피문자\로 인해\w를 만들어줌
		
		//Pattern.matches(regex,input) : 정규표현식과 입력값을 전달받아 입력값이 
		//정규표현식의 규칙과 다른 경우 [false]를 반환, 동일한 경우 [true]를 반환
		if(!Pattern.matches(idReg, id)) {//입력값이 정규표현식의 규칙과 다른 경우
			System.out.println("[에러]아이디를 형식에 맞게 입력해 주세요.");
			System.exit(0);
		}
		
		System.out.println("[메세지]정상적인 아이디를 입력 하였습니다.");
		
		
        
        
		System.out.print("비밀번호를 입력해 주세요. >> ");
		String password=scanner.nextLine();
		
		if(password==null || password.equals("")) {//사용자 입력값이 없는 경우
			System.out.println("[에러]비밀번호를 반드시 입력해 주세요.");
			System.exit(0);
		}
		
		String passwdReg="^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*_-]).{8,30}$";
		// .* : 임의의 문자가 0번 이상 반복된다
		// (없어도 형식상 문제는 없으나 해석하기 쉽도록 추가해주는 것을 권장)
		if(!Pattern.matches(passwdReg, password)) {
			System.out.println("[에러]비밀번호를 형식에 맞게 입력해 주세요.");
			System.exit(0);
		}
		
		System.out.println("[메세지]정상적인 비밀번호를 입력 하였습니다.");
		
        
        
        
		
		System.out.print("이메일을 입력해 주세요. >> ");
		String email=scanner.nextLine();
		
		if(email==null || email.equals("")) {
			System.out.println("[에러]이메일을 반드시 입력해 주세요.");
			System.exit(0);
		}
		
		//이메일 입력규칙 : [아이디@도메인] 형식으로 입력
		String emailReg="^([a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+)*$";
		if(!Pattern.matches(emailReg, email)) {
			System.out.println("[에러]이메일을 형식에 맞게 입력해 주세요.");
			System.exit(0);
		}
		
		System.out.println("[메세지]정상적인 이메일을 입력 하였습니다.");
		
		
		scanner.close();}}





profile
Study Log 📂

0개의 댓글

관련 채용 정보