정규 표현식

성혜·2024년 1월 23일
0

Java

목록 보기
24/25
post-thumbnail

정규 표현식, Regular Express

특정패턴의 문자열을 검색하는 도구


정규식 표현식 요소(=문법)

1. x

  • x는 임의의 문자 1개
    ex) a 로 무언가를 찾아라 > a 찾아줌
    ex) abc > abc


2. .

  • 임의의 문자 1개
    ex) . > 문자 1개
    ex) .. > 문자 2개
    ex) a.c => a로 시작해서 c로 끝나는 글자 찾기(한글자씩)
    	 > abc, aac, acc,adc, azc, a1c, a홍c
    ex) a..c > abbc, a길동c, a11c
    ex) a.?c > abc, adc, ac


3. 출현횟수

  • 바로 앞의 문자(집합)의 출현 횟수를 표현

3.1 생략**

  • 바로 앞의 대상의 출현 횟수가 생략x, 중복x
  • 출현 횟수: 1

3.2 ?

  • 바로 앞의 대상의 출현 횟수가 생략o, 중복x
  • 출현 횟수: 0~1
  • ?앞에 a가 있을 수도 있고 없을 수 있다 => bc,abc를 찾아라
    ex) a?bc > ab, abc, abb,ac, bc, bbc, aabc
    ex) 홍?길동 > 안녕 ~ 길동아 네 이름은 홍길동이지?
    ex) (자바)?코드 > 자바코드가 있습니다. 그런데 코드에 에러가 있어요. 추가로 자코드가 있습니다.

3.3.+

  • 바로 앞의 대상의 출현 횟수가 생략x, 중복o
  • 출현 횟수: 1 ~ 무한대
    ex) a+bc > ab, abc, abb,ac, bc, bbc, aabc => abc, aabc, aaaabc...
    ex) 홍+길동 > 안녕 ~ 길동아 네 이름은 홍길동이지? 홍홍길동, 홍홍홍홍홍홍길동
    ex) (자바)+코드 > 자바코드가 있습니다. 그런데 코드에 에러가 있어요. 추가로 자코드가 있습니다. 자바자바코드, 자바자바자바자바코드

3.4 *

  • 바로 앞의 대상의 출현 횟수가 생략o, 중복o
  • 출현 횟수: 0 ~ 무한대
    ex) abc > ab, abc, abb,ac, bc, bbc, aabc => bc, abc, aabc, aaaabc...
    ex) 홍
    길동 > 안녕 ~ 길동아 네 이름은 홍길동이지? 길동, 홍길동, 홍홍길동, 홍홍홍홍홍홍길동


4. 선택, Choice

  • 연산자 or 역할
  • [] 안의 문자 중 1개를 검색

4.1 [열거값]
ex) [012] > 제 나이은 12살입니다. 제 동생은 10살이에요. 키는 160cm입니다. 몸무게는 50kg이에요.
ex) [나생는] > 제 나이은 12살입니다. 제 동생은 10살이에요. 키는 160cm입니다. 몸무게는 50kg이에요.
ex) [김이박]길동 > 홍길동, 김길동, 이길동, 박길동, 정길동, 최길동
ex) [김이박]?길동 > 홍길동, 김길동, 이길동, 박길동, 정길동, 최길동
ex) [0123456789]+ > 숫자가 최소 연속으로 1개 이상 나온 숫자들을 찾아라

ex) 주민등록번호
980101-1234567
[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]

* 선택에서 연속된 문자를 간단하게 표현하는 방법**

ex) 숫자 > [0123456789] > [0-9]
ex) 영어소문자 > [a-z]
ex) 영어대문자 > [A-Z]
ex) 영문자 [A-Za-Z]
ex) 한글 > [가-힣]

ex) 주민번호 > [0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]

4.2 [^열거값]

  • 4.1의 부정형태
  • 열거값을 제외한 나머지 검색

ex) [0-9] > [^0-9] > 숫자가 아닌것만 찾음



5. 출현 횟수

  • 바로 앞의 문자(집합)의 출현 횟수를 표현
  • ?, + , * 보다 더 세밀한 패턴 지정이 가능

5.1 {n}

  • n : 출현 횟수
    ex) a{1}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > abc
    ex) a{2}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > aabc
    ex) a{3}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > aabc

5.2 {n,m}

  • n : 최소 출현 횟수
  • m : 최대 출현 횟수
    ex) a{1,2}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > abc, aabc
    ex) a{2,3}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc
    ex) a{0,1}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > ?와 같음

5.3 {n, }
ex) a{1,}bc > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > + 와 동일
ex) abc{0,} > ab, bc, abc, ac, abbc, abcc, aabc, aaabc > * 과 동일

ex) 주민번호 > [0-9]{6}-[0-9]{7} //현역에서 쓰는 모습



7. 줄임표현

7.1 \d or \D

  • Digital > 숫자
  • [0-9] == \d
  • [^0-9] == \D
    ex) 주민번호 > \d{6}-\d{7}

7.2 \w or \W

  • Word > 영어대소문자 + 숫자 + '_' 조합
    ex) \w{2,5}

7.3 \s or \S

  • 공백 문자 (스페이스, 탭, 엔터)
    ex) \s+ > 공백이 한개 이상을 찾아라
    ex) \S+ > 공백이 아닌 모든 문자


  • 정규표현식 활용 예시 코드
		//자바 > 여러 메서드의 인자값으로 정규 표현식을 지원한다.
		//게시판 > 글쓰기 > 개인정보 (전화번호) 마스킹
		String txt = "안녕하세요. 홍길동입니다. 제 연락처는 010-7894-5612 010.4567.8456입니다. 연락주세요. 혹시 연락이 안되면 다른 번호 010-1234-4567 01012344567로 연락주세요";
		
		System.out.println(txt.replaceAll("[0-9]{3}-[0-9]{3,4}-[0-9]{4}", "xxx-xxxx-xxxx")
								.replaceAll("[0-9]{3}.[0-9]{3,4}.[0-9]{4}", "xxx-xxxx-xxxx")
								.replaceAll("[0-9]{3}[0-9]{3,4}[0-9]{4}", "xxx-xxxx-xxxx"));
		
		System.out.println(txt.replaceFirst("[0-9]{3}-[0-9]{3,4}-[0-9]{4}", "xxx-xxxx-xxxx"));
profile
하루를 정리하고 기록합니다.

0개의 댓글