728x90
728x90

정규표현식이란

정규표현식이란 규칙을 가진 문자열을 표현하는데 사용하는 형식 언어입니다.
주로 문자열의 검색과 치환을 위해 사용하고 있습니다.
문자열이 특정한 조건을 만족하는지 분류가 필요한 경우 조건문을 사용하면 복잡하지만,
정규표현식을 이용하면 간단하게 분류 할 수있습니다.
하지만 간단한 만큼 가독성떨지는 단점이 있습니다.

 

표현식 의미
^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할 필요 없는거 아닌가?


참고문헌

HAMA 블로그 - 정규표현식 정리

정규 표현식 테스트

728x90
728x90