ejyoo's 개발 노트

정규표현식 기초 문법 본문

BackEnd/정규표현식

정규표현식 기초 문법

ejyoovV 2021. 3. 3. 10:50

정규표현식 : 문자열의 패턴을 검사하는 표현식

 

  • ^ : 뒷 문자로 시작 ex) ^a : a로 시작하는 문자열
  • $ : 앞 문자로 종료

    ex) $a : a로 끝나는 문자열

  • . : 임의의 문자(줄바꿈 제외) 어떤 문자 상관없이 임의의 한 글자를의미함. 단, 줄바꿈은 제외한다.
  • * : 앞 문자가 0개 이상 ex) a* : a가 하나도 없을 수 있고 여러개일 수 있음.
  • + : 앞 문자가 1개 이상 ex) a+ : a가 하나 이상 옴
  • ? : 앞 문자가 없거나 1개 ex) ?a : a가 없거나 한개가 온다.
  • [ ] : 문자의 집합이나 범위 ex) [a-z] : a부터 z까지 ex) [^a-z] : a부터 z가 아닌 것 (^)기호를 씀으로써 부정 표시
  • ( ) : 그룹화(1개의 문자처럼 인식)
  • ( | ) : OR 연산
  • \s : 공백, 탭, 줄바꿈
  • \S : 공백, 탭, 줄바꿈이 아닌 문자
  • \w : 알파벳이나 숫자
  • \W : 알파벳이나 숫자가 아닌 문자
  • \d : 숫자
  • \D : 숫자가 아닌 문자
  • (?i) : 뒷 문자의 대소문자 구분 안함.
  • \ : 정규표현식에서 사용되는 특수문자가 아니란 것을 표현
/*
	 * 정규표현식 : 문자열의패턴을 검사하는 표현식
	 * 
	 * ^	뒷 문자로 시작		=> ^a : a로 시작하는 문자열
	 * $	앞 문자로 종료		=> $a : a로 끝나눈 문자열이다.
	 * .	임의의 문자(줄바꿈 제외)		=> 어떤 문자든지 상관없이 임의의 한글자를 의미함. 단, 줄바꿈을 제외함
	 * *	앞 문자가 0개 이상		=> 앞에 있는 문자가 0개 이상이다. 즉 a* 라면 a가 하나도 없을수도 있고 여러개일 수 있다.
	 * +	앞 문자가 1개 이상		=> +a : a 가 하나 이상 온다.
	 * ?	앞 문자가 없거나 1개		=> ?a : a 가 없거나 한개가 온다.
	 * 
	 * []	문자의 집합이나 범위([a-z] : a부터 z까지, [^a-z]:a부터 z가 아닌것)		=> ^을 함으로써 부정표현임. 
	 * {}	앞 문자의 개수({2}:2개, {2,4}:2개 이상 4개 이하)		=> a{2} : a문자가 2개다.
	 * ()	그룹화(1개의 문자처럼 인식)
	 * |	OR 연산
	 * \s	공백, 탭, 줄바꿈
	 * \S	공백, 탭,줄바꿈이 아닌 문자
	 * \w	알파벳이나 숫자
	 * \W	알파벳이나 숫자가아닌 문자
	 * \d	숫자
	 * \D	숫자가 아닌문자
	 * (?i)	뒷 문자의 대소문자 구분안함
	 * \	정규표현식에서사용되는 특수문자 표현		=> 정규형에 쓰는 특수문자 중 문자열로 들어올 때 사용
	 * */
	
	public static void main (String[] args) {
		String str = "abc123";
		//정규표현식을 만들때에는 내가 원하는 형식만 타이트하게 만드는것이 좋다.
//		String regex = "[a-z]{3}[0-9]{1,3}";//소문자 a부터 z 까지 3글자 온다. 0부터 9까지의 숫자가 1개 이상 3개 이하온다.
//		String regex = "[a-z0-9]+";//a-z 0-9의 범위의 한문자(영문소문자, 숫자)가 1개 이상 온다.
		String regex = "\\w*";//알파벳이나 숫자가 0개 이상 들어온다. 자바에서는 \를 두개 넣어야 인식을 한다.
		
		Pattern p = Pattern.compile (regex);//정규 표현식을 파라미터로 넘겨줌. 정규표현식을 확인해서 패턴을 만들어줌
		Matcher m = p.matcher (str);//str이 regex의 패턴과 동일한지 확인
		System.out.println (m.matches()); //true
		
		//아이디, 전화번호, 이메일 주소의 유효성을 검사하는 정규표현식을 만들어주세요
		//아이디 기준 : 5~20 자의 영문 소문자, 숫자와 특수기호 (-), (_) 만 사용 가능하다
		//[a-z_] : a부터 z까지 _ 포함
		String regex1 = "[a-z0-9-_]{5,20}+";//아이디 : 통과
		String regex2 = "(0\\d{1,2})-(\\d{3,4})-(\\d{4})";//전화번호 : 통과
		//선생님 전화번호 정규식 : ^0\\d{1,3}-\\d{3,4}-\\d{4}
		String regex3 = "([a-z0-9-_]{5,20})@([a-zA-Z]+)\\.([a-zA-Z]{2,3})";//내가쓴 이메일
		//선생님 이메일 정규식 : [a-z0-9_-]{5,20}@[a-zA-Z]+\\.(?i)(com|net|org|([a-z]{2}\\.[a-z]{2}))
		//.에 역슬러시 2개가 있는 이유는 정규표현식에서 .을 구분자로 사용하고 있기 때문에 특수문자 '.'이란것을 알려주기 위해 사용한것.
		
		str = "o3k_93@ac.er";
		p = Pattern.compile (regex3);//정규 표현식을 파라미터로 넘겨줌. 정규표현식을 확인해서 패턴을 만들어줌
		m = p.matcher (str);//str이 regex의 패턴과 동일한지 확인
		System.out.println ("str : " + m.matches());

'BackEnd > 정규표현식' 카테고리의 다른 글

정규식 특수문자  (0) 2021.03.25
정규식  (0) 2021.03.24