정규표현식이란
정규표현식이란 규칙을 가진 문자열을 표현하는데 사용하는 형식 언어입니다.
주로 문자열의 검색과 치환을 위해 사용하고 있습니다.
문자열이 특정한 조건을 만족하는지 분류가 필요한 경우 조건문을 사용하면 복잡하지만,
정규표현식을 이용하면 간단하게 분류 할 수있습니다.
하지만 간단한 만큼 가독성떨지는 단점이 있습니다.
표현식 | 의미 |
^x | 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다. |
x$ | 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다. |
.x | 임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다. |
x+ | 반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다. |
x? | 존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다. |
x* | 반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다. |
x|y | or 를 표현하며 x 또는 y 문자가 존재함을 의미한다. |
(x) | 그룹을 표현하며 x 를 그룹으로 처리함을 의미한다. |
(x)(y) | 그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다. |
(x)(?:y) | 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. |
x{n} | 반복을 표현하며 x 문자가 n번 반복됨을 의미한다. |
x{n,} | 반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다. |
x{n,m} | 반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다. |
[xy] | 문자 선택을 표현하며 x 와 y 중에 하나를 의미한다. |
[^xy] | not 을 표현하며 x 및 y 를 제외한 문자를 의미한다. |
[x-z] | range를 표현하며 x ~ z 사이의 문자를 의미한다. |
\^ | escape 를 표현하며 ^ 를 문자로 사용함을 의미한다. |
\b | word boundary를 표현하며 문자와 공백사이의 문자를 의미한다. |
\B | non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다. |
\d | digit 를 표현하며 숫자를 의미한다. |
\D | non digit 를 표현하며 숫자가 아닌 것을 의미한다. |
\s | space 를 표현하며 공백 문자를 의미한다. |
\S | non space를 표현하며 공백 문자가 아닌 것을 의미한다. |
\t | tab 을 표현하며 탭 문자를 의미한다. |
\v | vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. |
\w | word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. |
\W | non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. |
정규표현식을 사용할 때 Flag를 사용하지 않으면 문자열에 대해서 검색을 한번만 처리하고 종료하게 된다.
Flag는 다음과 같은 것들이 존재한다.
Flag | 의미 |
g | Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. |
i | Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다. |
m | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. |
정규표현식 예시
핸드폰 번호 정규식
regex = /^\d{3}-\d{3,4}-\d{4}$/;
^ : 처음 (숫자 3개 앞에 아무것도 없어야 함)
\d{3} : (3자리 숫자)
- : 하이픈 존재
\d{3,4} : (3자리 또는 4자리 숫자)
\d{4} : (4자리 숫자)
$ : 끝
이메일 정규식
regex = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
/^[0-9a-zA-Z] : 첫 문자는 숫자 또는 영문 대소문자로 시작
([-_.]?[0-9a-zA-Z])* :
[-_.]? : - _ . 중 하나가 있어도 되고 없어도 되고
[0-9a-zA-Z] : 숫자 또는 영문 대소문자
* : 연속으로 몆개씩 있어도 됨
[a-zA-Z]{2,3} : 엉문 대소문자가 2개 또는 3개 존재
i : 대소문자 구분 x 근데 이럴거면 a-zA-Z할 필요 없는거 아닌가?
참고문헌
'etc.' 카테고리의 다른 글
스캔한 도서를 pdf로 만들어 보자 (image to pdf) (0) | 2024.10.29 |
---|---|
라즈베리파이 공유기 만들기 (Routed Wireless Access Point) (0) | 2022.08.08 |
지그재그 지그비 zigbee (0) | 2022.07.10 |
개발자를 위한 구글링 팁 (0) | 2021.11.11 |
난해한 프로그래밍 언어 - 아희 (0) | 2021.10.15 |