카테고리 없음

정규표현식 뽀개기!

석이 2021. 9. 18. 14:50

링크

유튜브 드림코딩 by 엘리 정규표현식 강의 : https://www.youtube.com/watch?v=t3M6toIflyQ 

정규표현식 연습 사이트 : https://regexr.com/5mhou

정규표현식 퀴즈 사이트 : https://regexone.com/

 

 

 

정규표현식이란?

regex라고 불리는 정규표현식은 regular expression의 약자로 1950년 미국의 수학자 Stephen Cole Kleene에 의해 개발되었다. 텍스트에서 특정한 패턴을 찾기 위해 유용하게 쓰일 수 있고, 특정 텍스트에서 전화번호를 추출하거나 사용자에 의해 작성된 아이디, 패스워드 요소가 특정한 패턴에 부합하는지 확인하는 유효성 검사에도 사용될 수 있다. 즉,데이터를 추출하고, 가공해서 사용하기 편한 형태로 만드는 과정에 상~당히 유용하게 사용될 수 있다!

 

과거에 유닉스 기반의 컴퓨터에서 많이 이용되다 현재는 java, python, javascript 등 다양한 언어에서 내부적으로 지원하는 기능이 되었다. 형태를 모르고 보게 되면 굉장히 난해해 보이지만 실제로는 문법이 간단하기 때문에 배워두면 적은 노력을 들이고도 충분히 제 값을 해낼 것이다!

 

기본 형태는,

 

  • /regex?/i

와 같고, 양쪽의 슬레시(/) 안에 내가 찾고 싶은 패턴을 기입하고 flag(식에서 i 부분)에서 어떤 옵션으로 패턴을 찾고 싶은지 선택할 수 있다.

 

 

정규표현식 flag

정규표현식에서 flag를 이용하면 검색 설정을 부여할 수 있다. 자바스크립트에서 지원하는 패턴은 아래의 6개이다.

 

플래그(flag) 설명
i 대소문자의 구분 없이 검색하도록 설정함. (a 입력 -> A, a 모두 추출)
g 패턴과 일치하는 모든 부분을 선택하도록 설정함. g 플래그가 없으면 첫 번째의 결과만 반환.
m 다중 행 모드(multiline mode). ^와 $가 모든 행에 대응.
y 대상 문자열의 현재 위치에서 비교를 시작하도록 설정함.
s  . 이 개행 문자 \n도 포함하도록 함. (firefox, IE, Edge 미지원)
u 유니코드 전체를 지원함. (firefox, Edge 미지원)

 

 

정규표현식 검색패턴

Groups and ranges

Character 설명
| 또는
( ) 그룹
[ ]  문자셋. 괄호 안의 어떤 문자든 (ex. [a-z] = '문자열 a부터 z까지 어느 문자든')
[^] 부정 문자셋. 괄호 안의 어떤 문자가 아닌 것
(?: ) 찾지만 기억하지는 않음. (그룹화하고 싶지 않을 때)

 

Quantifiers

Character 설명
? 없거나 있거나 (ex. a?bc -> "abc", "bc" 모두 선택됨)
* 없거나 있거나 혹은 많거나 (ex. a*bc -> "aabc", "abc", "bc" 모두 선택됨)
+ 하나 있거나 혹은 많거나 (최소 하나는 있어야 함)
{n} n번 반복 (ex. a{3}bc -> "aaabc")
{n, } 최소
{n, m} 최소 n개, 최대 m개

 

 

Boundary-type

Character 설명
\b 단어 맨 앞의 (ex. \bHe -> Hello 중 He / aHello 중 아무것도 안 선택)
\B 단어 맨 앞이 아님 (not \b)
^ 문장의 시작
$ 문장의 끝

 

 

Character classes

Character 설명
\ 뒤의 것을 특수 문자로 취급하지 않음 (ex. \/ = "/을 특수문자로 취급하지 않겠음")
. 모든 글자 선택 (줄바꿈 문자는 제외)
\d 0~9의 아라비아 숫자(digit numbers)
\D 아라비아 숫자가 아님 (not \d)
\w 문자 (word)
\W 문자가 아님 (not \w)
\s space 공백
\S space 공백이 아님