정규식 포기자를 위한 가장 쉬운 정규식 — 하

Harry The Great
해리의 유목코딩
7 min readFeb 18, 2020

상편에 이은 하편입니다.

전화번호 다루기

010-0101-0101
010-2312-3212
010-3212-2312

이번에는 휴대폰번호입니다. 숫자는 범위를 0–9로 표현할 수 있습니다. 이전에 중괄호와 조합하여 아래처럼 선택을하면 010-[0–9]{4}-[0–9]{4} 로 표현할 수 있습니다.

숫자표현도 직접 표기해주는것 이외에 \d 처럼 표현할 수 있습니다. 010-\d{4}-\d{4}를 입력하면 동일한 영역이 선택됩니다.

대문자 \D는 반대로 숫자가 아닌 문자를 선택합니다.

Korea: 080-333-4000
Singapore: 800-186-1087
Japan: 0120-278753-5

이전에 휴대폰번호는 010–4자리-4자리였지만 이번에는 대시로 구분되는것 이외에는 각기 제각각입니다.

모든 문자를 타나내는 점(Dot)

이번에는 대시타입이 아니기 때문에 마카오는 선택되지 않습니다.

\d+[)-]\d+-\d+

이전에 배운것을 복습하여\d+[)-]\d+-\d+ 처럼 괄호 또는 대시로도 선택할 수 있지만. 을 쓰면 숫자와 문자를 포함하는 모든 글자가 선택됩니다. 이때 점표기를 사용하면 숫자를 포함한 모든 문자를 선택할 수 있습니다.

\d+.\d+.\d+

하나 또는 없음을 나타내는 물음표

KOREA: 080-333-4000
Singapore: 800-186-1087
JAPAN: 0120-278753-5
MACAO: (858)6262-1631

마카오의 전화번호에 앞 괄호가 추가되었습니다. 괄호가 추가되면서 괄호는 선택이 되어있지 않습니다. 괄호를 표현해주기 위해선 그룹핑 오퍼레이터로 사용되기 때문에 앞에 슬래시를 붙여주어야 합니다.

\(\d+.\d+.\d+와같이 표현하면 반대로 나머지 번호들이 선택되지 않습니다. 이럴 때 물음표를 사용할 수 있습니다. 물음표는 한번 혹은 없음을 나타냅니다.

\(?\d+.\d+.\d+에서 (? 는 (가 한번 혹은 없음입니다.

로또번호

818회 로또 당첨결과: 5 18 30 41 43 45 보너스 13

로또 번호는 숫자가 하나 혹은 두 개이기 때문에 이전에 배운 중괄호를 사용하여 \d{1,2}를 사용하면 문제가 발생합니다.

당첨 번호 이외에 앞에 818도 선택이 되기 때문입니다. 이번에는 바운더리(boundary)에 대해 살펴보겠습니다.

단어의 영역을 나타내는 바운더리

바운더리는 단어의 경계를 가리킵니다. 그렇다면 단어가 숫자로만 이루어지고 앞뒤로 텍스트가 포함되지 않는 바운더리를 가진다면

\b[0–9]{1,2}\b

\b와 \b가 각각 바운더리를 의미합니다. 양쪽에 위치하였기때문에 바운더리로 시작해서 바운더리로 끝나야합니다.

회사명

A시스템즈 대표: 나대표
B솔루션즈 대표: 김대표
C네트워크 대표: 남궁대표

이번에는 공교롭게도 직함과 이름이 동일한 회사들입니다. 대표님들 성을 제외한 이름이 전부 ‘대표’라는 글자가 들어가게 됩니다. 달러 사인($)을 사용하면 문장의 끝이 끝나는 글자를 지정할 수 있습니다.

문장의 시작과 끝 ^와 $

[가-힣]+대표$

이번에는 맨 앞에 회사명만을 선택해보겠습니다. 달러사인($)은 문장의 끝을 나타냅니다. 문장의 끝에 위치하고 앞의 3글자가 [아무 한글자 한글] + 대표와 일치하는 텍스트가 매칭됩니다.

이번에는 맨 앞에 회사명만을 선택해보겠습니다 꺽쇠(^)는 문장의 시작을 나타냅니다.

^[\w가-힣]+

^[\w가-힣]+ 정규식은 문장의 시작(^)위치에 있으며 알파벳,한글,숫자로 하나이상 구성된 텍스트가 선택됩니다.

한가지 주의해야 할 점이 있습니다. 꺽쇠(^)가 대괄호가 밖에서 사용되는 경우와 안에서 사용되는 경우의 의미가 다릅니다. 위처럼 밖에서 사용되었다면 문장의 시작을 의미하지만 안에서 사용되면 Not을 의미합니다.

\[^\s]+ 를 사용하게되면 다소 다른결과가 나오는데 해석을해보자면 s(빈칸)이 아닌 영역을 하나 이상 선택하게되므로 각 모든 텍스트들이 선택됩니다.

사이트주소

https://www.naver.com
https://www.daum.net
https://www.google.com
https://www.nate.com
http://www.abc.net
https://youtube.com

사이트 주소를 모두 선택할 수 있는 정규식을 만들어보겠습니다.

시작은 크게 https://http://로 나뉩니다. s는 사용되는 경우와 사용되지 않는 경우이기 때문에 https?://로 표현할 수 있습니다. 다음으로 www도 마찬가지로 포함이 될 수도 안 될 수도 있기 때문에 (www\.)?로 표현합니다. 슬래시가 들어간 이유는 모든 글자/숫자를 나타내는 닷(.) 오퍼레이터와의 혼돈을 피하기 위해서입니다. 다음으로 ‘글자’ + ‘.’ 글자 로 되어있기 때문에 w+\.\w+로 표현할 수 있습니다.

https?://(www\.)?\w+\.\w+

정규식 캡쳐링

괄호를 사용하면 치환할 때 변수로 받을 수 있습니다. 예를 들어 위 예시에서 https?://(www\.)?\w+\.\w+에서 치환문자를 $1로 입력해주세요.

다음 [Replace All]버튼을 클릭합니다.

정규식 캡쳐링에서 각 괄호는 순서대로 $1, $2, $3으로 받게됩니다. 우리는 앞서 (www.)?를 사용해서 정규식을 $1로 받았습니다.

이번에는 식을 아래처럼 변경해보겠습니다.

https?://(www.)?(w+).(w+)
$2.$3

마치며

최대한 쉽게 접근하기 위해 가장 핵심이 되는 내용만 알아보았습니다. 혹시 더 깊은 내용이 알고 싶으시다면 (?:…),(?<=…),{n,}+, ++, ?+ 와같은 다양한 오퍼레이터들이 있기 때문에 각 오퍼레이터의 종류와 다양한 예제 등을 살펴보면 실력이 금방 늘어납니다😀

--

--

Harry The Great
해리의 유목코딩

Android & IOS Developer 😀 미디움 이외에 스니펫이나 디버그노트로 활용하는 https://www.harrymikoshi.com/ 블로그도 운영하고있습니다.