2021-06-06 · 6

정규표현식 / 주로 사용하는 정규표현식

regextil

이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.

정규표현식이란


정규표현식이란?

정규표현식이란 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어 입니다. 주로 Prog ramming Language나 Text Edittor등 에서 문자열의 검색과 치환을 위한 용도로 사용되고 있습니다. 이 정규표현식은 코드가 간단한 만큼 가독성이 매우 떨어 외우거나 보고 하지 않으면 이해하기 힘들다는 문제점이 있습니다.

정규 표현식의 용어들

정퓨 표현식에서 사용되는 기호들을 Meta문자라고 표현합니다.

<table style="border-collapse: collapse; width: 100%; height: 280px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;"><b>표현식</b></td><td style="width: 70%; text-align: center; height: 20px;"><b>의미</b></td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">^x</td><td style="width: 70%; text-align: justify; height: 20px;">문자열의 시작을 표현하며 x 문자로 시작됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x$</td><td style="width: 70%; text-align: justify; height: 20px;">문자열의 종료를 표현하며 x 문자로 종료됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> .x</td><td style="width: 70%; text-align: justify; height: 20px;">임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x+</td><td style="width: 70%; text-align: justify; height: 20px;">반복을 표현하며 x 문자가 한번 이상 반복됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x?</td><td style="width: 70%; text-align: justify; height: 20px;">존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x*</td><td style="width: 70%; text-align: justify; height: 20px;">반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> x|y</td><td style="width: 70%; text-align: justify; height: 20px;">or 를 표현하며 x 또는 y 문자가 존재함을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)</td><td style="width: 70%; text-align: justify; height: 20px;">그룹을 표현하며 x 를 그룹으로 처리함을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;"> (x)(y)</td><td style="width: 70%; text-align: justify; height: 20px;">그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리됩니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">(x)(?:y)</td><td style="width: 70%; text-align: justify; height: 20px;">그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; height: 20px; text-align: center;">x{n}</td><td style="width: 70%; text-align: justify; height: 20px;">반복을 표현하며 x 문자가 n번 반복됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,}</td><td style="width: 70%; text-align: justify; height: 20px;">반복을 표현하며 x 문자가 n번 이상 반복됨을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30%; text-align: center; height: 20px;">x{n,m}</td><td style="width: 70%; text-align: justify; height: 20px;">반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미합니다<span style="color: #000000;">.</span></td></tr></tbody></table>

Meta 문자들 중에서 좀 더 특수하게 사용되는 문자들이 존재합니다. [] 는 내부에 지정된 문자열의 범위 중에 한 문자만 선택한다는 특수한 의미를 가집니다.

<table style="border-collapse: collapse; width: 100%; height: 300px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"><b>표현식</b></td><td style="width: 69.7674%; text-align: center; height: 20px;"><b>의미</b></td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">[xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">문자 선택을 표현하며 x 와 y 중에 하나를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [^xy]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">not 을 표현하며  x 및 y 를 제외한 문자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> [x-z]</td><td style="width: 69.7674%; text-align: justify; height: 20px;">range를 표현하며 x ~ z 사이의 문자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">^</td><td style="width: 69.7674%; text-align: justify; height: 20px;">escape 를 표현하며 ^ 를 문자로 사용함을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \b</td><td style="width: 69.7674%; text-align: justify; height: 20px;">word boundary를 표현하며 문자와 공백사이의 문자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\B</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \d</td><td style="width: 69.7674%; text-align: justify; height: 20px;">digit 를 표현하며 숫자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \D</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non digit 를 표현하며 숫자가 아닌 것을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \s</td><td style="width: 69.7674%; text-align: justify; height: 20px;">space 를 표현하며 공백 문자를 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;"> \S</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non space를 표현하며 공백 문자가 아닌 것을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\t</td><td style="width: 69.7674%; text-align: justify; height: 20px;">tab 을 표현하며 탭 문자를 의미한합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\v</td><td style="width: 69.7674%; text-align: justify; height: 20px;">새로 탭 문자를 찾습니다. </td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\w</td><td style="width: 69.7674%; text-align: justify; height: 20px;">word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 30.2326%; text-align: center; height: 20px;">\W</td><td style="width: 69.7674%; text-align: justify; height: 20px;">non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미합니다.</td></tr></tbody></table>

정규표현식을 사용할 때 Flag라는 것이 존재하는데 Flag를 사용하지 않으면 문자열에 대해서 검색을 한번만 처리하고 종료하게 됩니다.

<table style="border-collapse: collapse; width: 100%; height: 80px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"><b>Flag</b></td><td style="width: 84.4186%; text-align: center; height: 20px;"><b>의미</b></td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;"> g</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">i</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미합니다.</td></tr><tr style="height: 20px;"><td style="width: 15.5814%; text-align: center; height: 20px;">m</td><td style="width: 84.4186%; text-align: justify; height: 20px;">Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미합니다.</td></tr></tbody></table>

예제

/[0-9]/g
전체에서 0~9 숫자중에 '하나'만의 숫자를 찾음
/[no]/g
전체에서 'n'또는 'o' '하나'만의 문자를 찾음

<이메일 예시>

/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i

0~9사이 숫자 또는 a~z A~Z 알페벳중 하나로 시작하고 중간에 - _ \ . 존재할 있으며
0~9 a~z A~Z 반복할 있다. 다음으론 반드시 @ 와야하고 0~9 a~z A~Z중 하나가 존재해야하고
 뒤로는 - _ \ . 존재할 있으며 0~9 a~z A~Z 반복할 있다. 다음으론 . 반드시 존재해야 하고
a~z A~Z가 2개~3개 존재해야한다. 모든 정규식은/소문자 구분하지 않는다.

참고:

https://hamait.tistory.com/342

https://choseongho93.tistory.com/130


원문: tistory — 2021-06-06 발행, 이 블로그로 이전됨.

댓글

댓글을 삭제할까요?

관련 글

정규표현식 / 주로 사용하는 정규표현식 · 나봄하랑