[Java] 정규표현식, Regular Expression 이론

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

정규 표현식, Regular Expression

  • 특정한 패턴(규칙)을 가지는 문자열의 집합을 표현하는 식
  • 특정한 패턴(규칙)을 가지는 문자열을 검색하는 용도
  • 대다수 환경/프로그래밍 언어 등에서 지원한다.
  • 유효성 검사에 유용하게 사용된다.

정규 표현식 구성요소

1. x

  • x의 임의의 1개 문자
  • 우리가 평소에 하는 검색
  • ex) a > a
  • ex) abc > abc

2. 출현 횟수

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

2.1 생략

  • 바로 앞의 대상의 출현 횟수가 1
  • 생략 안됨, 중복안됨
    ex) a?bc > a에 특수기호가 붙어 있고, bc에는 없는 것처럼 보이지만 생략한 것도 정규표현식에 포함된다.

2.2 ?

  • 바로 앞의 대상의 출현 횟수가 0~1
  • 생략O, 중복X
    ex) a?bc > a가 0~1번 출현한다.
  • bc, abc, ab, aabc, bbbc 등이 검색된다.
    ex) a?b?c : abc, bc, ac, c
    "안녕 홍길동~ 길동아~"
    ex) 홍?길동아? : 홍길동, 길동아
    "자바코드가 있습니다. 그런데 코드에 에러가 자코드 있습니다."
    ex) (자바)?코드 : 자바코드, 코드, 자코드

2.3 +

  • 바로 앞의 대상의 출현 횟수가 1~무한대
  • 생략X, 중복O
    ex) a+bc : abc, aabc, aaaabc
    "안녕 홍길동~ 길동아~"
    ex) 홍+길동 : 홍길동
    "자바코드가 있습니다. 그런데 코드에 에러가 자코드, 자바자바코드있습니다."
    ex) (자바)+코드 : 자바코드, 자바자바코드
    				

2.4 *

  • 바로 앞의 대상의 출현 횟수가 0~무한대 > 가장 경우의 수가 많다
  • 생략O, 중복O
    ex) a*bc : bc, abc, aabc, aaaaabc
    			

3. 선택, Choice

  • 열거값 중 하나가 나오는 패턴

3.1 [열거값]

"제 나이는 12살 입니다. 우리 형은 21살 입니다."
ex) [12] : (제 나이)1,2 / (우리형)2,1
ex) [0123456789] : 모든 (한자리)숫자를 찾는다.
ex) [13579] : (한자리)홀수만 찾는다.
ex) [0123456789][0123456789][0123456789] : 모든 (세자리)숫자를 찾는다.
ex) [0123456789]+ : (한자리)~(여러자리) 숫자를 찾는다.
ex) 전화번호 > 010-xxxx-xxxx
010-[0123456789]?[0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789]

010-1234-4567(o)
010-555-5555(o)
041-552-6019(x)
010-22-1111(x)

ex) 영어 소문자 > [abcdefghijklmnopqrstuvwxyz]+
ex) 모든 영문자 > [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+

***선택에서 연속된 문자를 간단하게 표현하는 방법 > 문자코드를 활용한다.
ex) 숫자 > [0123456789] > [0-9]
ex) 전환번호 > 010-[0-9]?[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]
ex) 영어 소문자 > [abcdefghijklmnopqrstuvwxyz] > [a-z]
ex) 영문자 > [a-zA-Z]
ex) '홍'씨 사람 > 홍[가-힣][가-힣]?
홍길동, 홍순신, 홍박사, 홍민
ex) 영문자+숫자 > [A-Za-z0-9]
ex) 식별자(변수명)로 적합한 문자 검사 > [A-Za-z0-9_]

3.2 [^열거값]

ex) [^0-9]+ > 숫자를 제외한 나머지 모든 문자

4. 출현 횟수(세밀)

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

4.1 {n}

  • n : 출연횟수
    ex) a{3}bc > aaabc

4.2 {n,m}

  • n : 최소 출현횟수
  • m : 최대 출현횟수
    ex) a{1,3}bc > abc, aabc, aaabc
    ex) a{0,1}bc > bc, abc == a?bc

4.3 {n,}

  • n : 최소 출현횟수
  • 생략 : 최대 출현횟수 : 무한대
    ex) a{2,}bc > aabc, aaaabc

    잘 사용하니 외워둘 것!

    주민등록번호
    [0-9]{6}-[0-9]{7}
    전화번호
    010-[0-9]{3,4}-[0-9]{4}**
    한글 2~4글자
    [가-힣]{2,4}

    		

ex) 영문자 5자 이상 + 첫문자가 대문자 (파스칼)
[A-Z][A-Za-z]{4,}
ex) 수업에서 사용하는 클래스명
[A-Z][A-Za-z0-9_]{1,}

5. 처음과 끝

5.1 ^

  • 대상이 뒤의 표현으로 시작
  • str.startWith("홍") 와 같음
    ex) ^홍길동

5.2 $

  • 대상이 앞의 표현으로 끝
  • str.endWith("동") 와 같음
    ex) 홍길동$
    	

6. 줄임표현

6.1 \d or \D

  • Digital > 숫자
  • [0-9] == \d
  • [^0-9] == \D

ex) 전화번호 : 010-\d{3,4}-\d{4}

6.2 \w or \W

  • Word > 영어대소문자 + 숫자 + _
  • [A-Za-z0-9_] == \w

6.3 \s or \S

  • 공백문자(스페이스, 탭, 엔터)

ex) \s홍길동\s
ex) \s{1,}홍길동
이름 홍길동 님
이름 홍길동 님
홍길동입니다.
이름홍길동님

이미 만들어진 정규표현식 모음 사이트

https://regexlib.com/Default.aspx

profile
웹백엔드개발자를 꿈꾸는

0개의 댓글