1. 정규 표현식이란 ?
(=정규식)
프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어이다.
정규 표현식은 문자열을 대상으로 패턴 매칭 기능을 제공하여, 반복문과 조건문 없이 패턴을 가진 문자열을 간단하게 검색, 추출, 치환할 수 있다.
ex) 이메일, 패스워드 검사(유효성 검사)등의 복잡한 문자 일치 기능 등
하지만, 주석이나 공백을 허용하지 않고 여러가지 기호를 혼합하여 사용하기 때문에 가독성이 좋지 않다는 문제가 있다🥹
일반적으로 자주 사용되는 방법은 정규표현식 리터럴이며, 아래 그림과 같이 구성되어 있다.
2. 플래그(flag)
플래그는 옵션이므로 선택적으로 사용한다.
하지만, 플래그를 사용하지 않은 경우 문자열 내 검색 매칭 대상이 1개 이상이더라도 첫번째 매칭한 대상만을 검색하고 종료한다.
g | Global | 문자열의 내의 모든 패턴 검색 |
i | Ignore case | 대소문자를 구별하지 않고 검색 |
m | Multi-line | 문자열의 행이 바뀌더라도 검색 |
3. 메타 문자
다른 언어에서 연산자나 예약어로 쓰이는 문자를 정규 표현식에서는 메타 문자라고 부른다.
메타문자 | ||
문자열의 시작과 끝을 알려주는 메타 문자 |
||
^ | 문자열 또는 줄의 시작을 지정 | ^0 : 0으로 시작하는 단어 |
$ | 문자열 또는 줄의 시작을 지정 | 0$ : 0으로 끝나는 단어 |
\b | 문자와 공백사이의 문자와 일치 | |
\B | 문자와 공백사이가 아닌 문자와 일치 | |
일치 메타 문자 |
||
. | 모든 아무 문자 하나와 일치 | |
| | 왼쪽과 오른쪽 패턴 중에 아무패턴이나 일치 | 여러개가 연결되면 그 중에서 단 하나의 패턴만 일치 |
문자 클래스 |
||
[] | 그 내부에 해당하는 문자열의 범위 중 한 문자만 선택한다는 의미 | 문자클래스 내부에서는 Meta문자를 사용할 수 없거나 의미가 다르게 사용된다. |
[xy] | x, y 중에 하나만 선택 | |
[^xy] | x,y를 제외하고 문자 하나를 찾음 | 문자 클래스([]) 내의 ^는 not을 의미 |
\d | 모든 숫자(아라비아 숫자)와 일치 | |
\D | 숫자(아라비아 숫자)가 아닌 모든 문자와 일치 | |
\w | 단어 영문자+숫자+_(밑줄) | [0-9a-zA-Z_] |
수량자 |
||
* | 패턴이 일치하지 않거나 한번 이상 반복할 때 일치 | {n,} : n번 이상 반복할 때 일치 {0.}과 같음 |
+ | 패턴이 한번 이상 반복할 때 일치 | {1,}과 같음 |
? | 패턴이 일치하지 않거나 한번만 반복할 때 일치 | {n,m} : n번에서 m번 안으로 반복할 때 일치 {0,1} |
4. 기본적인 정규식
-
^[0-9]*$: 숫자
-
^[a-zA-Z]*$: 영문자. 패턴변경자를 써서 /^[a-z]*$/i 같이 쓸 수 있다.
-
^[가-힣]*$: 현대 한글(유니코드를 지원하는 정규식 엔진에 한정)
-
^[ㄱ-ㅎㅏ-ㅣ가-힣]*$: 한글 자모 낱자를 포함한 모든 현대 한글
-
^[a-zA-Z0-9]*$: 영문/숫자
5. 학습 관련 사이트
1)
step-by-step 방식으로 빠르게 배울 수 있는 사이트.
2)
간편하게 정규식을 연습하고 디버깅할 수 있는 사이트. 여러 색상으로 그룹을 표시해주기 때문에 구분이 원활하다.
PCRE, 자바스크립트, 파이썬, Go를 지원한다.
3)
정규식을 시각화해주는 사이트들.
작성한 정규식을 선로도(Railroad Diagram)로 변환하여 보여준다.
정규식을 그림 파일로 다운로드하는 기능을 제공
실시간 정규식 시각화 및 매치 테스트를 제공
출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
https://poiemaweb.com/js-regexp
댓글