[그룹프로젝트-폴바셋] 1주차 개념 정리(1) - 정규 표현식 (계속 업데이트)

Magit·2020년 4월 26일
0

group-project

목록 보기
3/6

그룹프로젝트를 하다보니 정규표현식을 이용해서 유효성검사를 하는 부분이 있었다. 아직도 너무 어렵지만 적용하면 유용하게 쓸 수 있기 때문에 제대로 한 번 정리해보려고 한다.

참고 사이트들
생활코딩-정규표현식
https://regexr.com/
https://regex101.com/
devmin님의 정규표현식 글
Suwoni-Codelab님의 정규표현식 글
경영학도의 좌충우돌 코딩 - 정규표현식

정규표현식

  • 주의점 : 정규표현식은 대소문자, 빈칸을 철저하게 구분한다.

1. ^ 와 $ 사용법

  • ^ 을 앞에 붙이면 앞쪽에 있는 요소를 선택, $를 뒤에 붙이면 뒤에 있는 요소를 선택한다.

    ^you -> you are you
    you$ -> you are you

  • [] 안에서 ^를 쓸 경우는 해당문자들을 제외하고 선택 하라는 의미이다. not의 의미가 된다.

    정규표현식 : [^abc1-2]
    match : abcdefghijklmnopqrstuvwxyz12345

2. . (마침표, 포인트)

  • .모든 글자와 매칭된다. 그러나 .가 여러개면 해당 갯수만큼 글자마자 블럭이 생성된고 나머지는 선택되지 않는다.

    정규표현식 : .
    match : point is point
    정규표현식 : .....
    match : (point)( is p)oint (빈칸까지 합해서 14글자 이므로 10글자까지만 선택된다.)

3. escape(이스케이프)

  • . 이나[] 같은 메타 문자를 문자열에서 찾고 싶을 때, 메타 문자를 문자 그대로 사용할 수 있도록 변환해주는 기호. . 은 모든 문자와 일치하지만, \.의 경우 문자 . 와 일치한다.

4. [] (대괄호, square bracket)

  • [] 안에 있는 문자들 중 일치하면 선택된다. 안에 들어간 것들은 or 로 연결된다. 즉, [abc]라면 'a,b,c' 중에서 한 개의 문자와 매칭된다. (대괄호안에 몇 개의 문자가 들어오든 대괄호 한 개는 하나의 글자를 의미한다.)

    정규표현식 : [cbt]
    match : life is choice between birth and death
    정규표현식 : [cbt][et]
    match : life is choice between birth and death

  • 첫번째 정규표현식은 [] 안에 들어가있는 조건을 만족하는 녀석들을 하나씩 선택하였고, 두번째는 두개의 대괄호가 있는데 순서대로 cbt 중에 하나를 만족하면서 동시에 다음 문자로 et 문자중 하나를 만족하는 녀석들이 선택되었다.

5. 범위선택

  • 대괄호 사이에 [특정문자1-특정문자2] 가 존재할 때, 특정문자1과 특정문자2 사이의 모든 문자와 일치한다. [a-z] 는 알파뱃 소문자 a부터 z 까지와 일치한다.

    정규표현식 : [a-z]
    match : A Hobby Begun Late In Life. (대문자와 마침표를 제외한 녀석들이 전부 선택되었다.)
    정규표현식 : [a-eA-F1-3]
    match : abcdefghABCDEFGH12345

6. ()(소괄호, parentheses) 와 |(파이프라인, pipeline)

  • [] 에서는 한 글자만 매칭되었지만, () 를 통해서 다중글자를 매칭시킬 수 있다. 즉, 그루핑 할 수 있다는 의미이며 패턴과 일치하는 문자열을 탐색하고 () 그룹단위로 나눠서 캡쳐해놓는다. 또한, | 를 통해서 조건을 적용시킬 수 있다.

    정규표현식 : (ap|le)
    match : apple is apple
    정규표현식 : (Mon|Tues|Fri)day
    match : Monday Tuesday Friday

7. {}(중괄호, curly brackets)

  • 글자의 수량을 범위로 특정할 때 사용한다. {n} 은 앞에 존재하는 문자가 n번 반복되는 문자와 일치하고, {n,m}은 앞에 존재하는 문자가 n번 이상 m번 이하 반복되는 문자와 일치, {n,} 은 n번 이상 반복되는 문자와 일치한다.

    정규표현식 : [a-z]{3}
    match : Lorem ipsum dolor sit amet, consectetur adipiscing elit

8. 수량자(quantifier)

  • 한 글자가 몇 번 나타날지 구체화 시키는 역할을 한다. + 는 앞에 존재하는 문자가 1번 혹은 그 이상 반복될 때 사용하며 {1,0}과 같은 의미이다. ?는 앞에 존재하는 문자가 있을 수도, 없을 수도 있을 때 사용하는데 {0,1}과 같은 의미이다. *는 앞에 존재하는 문자가 0번 혹은 그 이상 반복되는 문자를 찾을 때 사용하는데, {0,}과 동일하다.

    정규표현식 : ab
    match : ab aab aaab bc
    정규표현식 : a+b
    match : ab aab aaab bc
    정규표현식 : a?b
    match : ab aab aaab bc
    정규표현식 : [ab]

    match : ab aab aaab bc

9. 탐욕적 수량자와 게으른 수량자

  • 탐욕적 수량자가능하면 가장 큰 덩어리를 찾으려 하는 성격을 갖고 있고 게으른 수량자가능한 가장 적은, 최소의 덩어리를 찾으려하는 성격을 갖고 있다.
  • +, *, {n,}은 탐욕적 수량자이고, 뒤에 ? 문자를 덧붙이면 게으른 수량자 +?, *?, {n,}? 가 된다.
    정규표현식 : <b>.*<\/b>
    match : [<b>BOLD!</b><hr><b>BOLD!</b>]
  • 탐욕적 수량자<b></b> 사이에 연속된 문자들을 찾는데, 아예 전체를 일치시켜버렸다.
    정규표현식 : <b>.*?<\/b>
    match : [<b>BOLD!</b>]<hr>[<b>BOLD!</b>]
  • 게으른 수량자가 최소의 문자 덩어리만 일치시키게 했다. 게으른 수량자조건을 만족하는 최소한의 범위를 매치시킨다고 생각하면 편하다.

10. 축약 표현

  • 매번 [0-9] 나 [a-z] 와 같이 조건을 거는것보다 축약표현을 쓰면 여러 표현들을 아우르는걸 한 번에 조건으로 걸 수 있다.
    • [0-9] =\d
      • 숫자를 찾는다.
      • 숫자찾을 때 사용
    • [^0-9] =\D
      • 숫자가 아닌 것을 찾는다.
      • 텍스트 + 특수문자 + 화이트스페이스 찾을 때 사용
    • [ \t\n\r\f\v] =\s
      • whitespace 문자인 것을 찾는다.
      • 스페이스, TAB, 개행(new line) 찾을 때 사용
    • [^ \t\n\r\f\v] =\S
      • whitespace 문자가 아닌 것을 찾는다.
      • 텍스트 + 특수문자 + 숫자 찾을 때 사용
    • [a-zA-Z0-9] =\w
      • 문자+숫자인 것을 찾는다. (특수문자는 제외. 단, 언더스코어 포함)
      • 텍스트 + 숫자 찾을 때 사용
    • [^a-zA-Z0-9] =\W
      • 문자+숫자가 아닌 것을 찾는다.
      • 특수문자 + 공백 찾을 때 사용

11. ?=

  • ?= 은 해당 패턴을 포함한 글자를 찾지만, 찾은 값

정규표현식 모아보기

스택오버플로우 참조(베끼기)
password regex

profile
이제 막 배우기 시작한 개발자입니다.

0개의 댓글