카테고리 없음
정규표현식 뽀개기!
석이
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 공백이 아님 |