/ /

치트시트 — 클릭하여 삽입

정규표현식이란?

정규표현식(regex 또는 regexp)은 검색 패턴을 정의하는 문자 시퀀스입니다. 문자열 검색, 유효성 검사, 텍스트 추출 및 치환에 사용됩니다. Regex는 거의 모든 프로그래밍 언어에서 지원되며 텍스트 처리 작업을 하는 모든 개발자에게 필수적인 도구입니다.

Regex 구문 빠른 참조

  • . — 줄바꿈을 제외한 모든 문자와 일치
  • ^ / $ — 문자열(또는 멀티라인 모드에서 줄)의 시작 / 끝
  • * / + / ? — 0개 이상 / 1개 이상 / 0개 또는 1개
  • {n,m} — n개에서 m개 사이의 반복
  • [abc] — 문자 클래스 — a, b 또는 c와 일치
  • [^abc] — 부정 문자 클래스
  • (abc) — 캡처 그룹
  • (?:abc) — 비캡처 그룹
  • \d / \w / \s — 숫자 / 단어 문자 / 공백
  • a|b — 선택 — a 또는 b와 일치

일반적인 Regex 패턴

  • 이메일: [\w.+-]+@[\w-]+\.[a-zA-Z]{2,}
  • URL: https?://[\w\-._~:/?#[\]@!$&'()*+,;=%]+
  • IPv4: (\d{1,3}\.){3}\d{1,3}
  • 전화번호 (미국): (\+1\s?)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}
  • Hex 색상: #([a-fA-F0-9]{6}|[a-fA-F0-9]{3})
  • 날짜 (YYYY-MM-DD): \d{4}-\d{2}-\d{2}

정규표현식에 대한 자주 묻는 질문

정규표현식에서 .*와 .+의 차이점은 무엇인가요?

별표(*)는 앞의 요소가 "0개 이상"을 의미하고, 더하기(+)는 "1개 이상"을 의미합니다. 패턴 .*는 빈 문자열을 포함한 모든 문자열과 일치하며, .+는 최소 하나의 문자가 필요합니다. 둘 다 기본적으로 탐욕적(greedy)으로 가능한 많이 매치합니다. ?를 추가하면 게으른(lazy) 매칭이 됩니다(가능한 적게 매치): .*?.+?.

정규표현식 플래그 g, i, m, s는 무엇을 하나요?

g(global) 플래그는 첫 번째에서 멈추지 않고 모든 매치를 찾습니다. i 플래그는 대소문자를 무시합니다. m(multiline) 플래그는 ^$가 전체 문자열이 아닌 각 줄의 시작과 끝과 일치하게 합니다. s(dotAll) 플래그는 점이 줄바꿈 문자도 일치하게 합니다. 필요에 따라 플래그를 결합하세요: /pattern/gim.

리터럴 점, 괄호 또는 기타 특수 문자를 어떻게 매칭하나요?

백슬래시로 특수 regex 문자를 이스케이프합니다. 리터럴 점은 .입니다 (백슬래시 없이 점은 모든 문자와 일치합니다). 리터럴 괄호는 ()입니다. 이스케이프가 필요한 다른 문자: ^ $ | ? * + { } [ ]. 예를 들어 URL example.com을 그대로 매칭하려면 /example.com/으로 작성하세요 — 그렇지 않으면 점이 모든 문자와 일치합니다.

탐욕적(greedy) 수량자와 게으른(lazy) 수량자의 차이점은 무엇인가요?

탐욕적 수량자(*, +, {n,m})는 전체 패턴이 여전히 일치하면서 가능한 많이 매치하려고 합니다. 게으른(비탐욕적) 수량자(*?, +?, {n,m}?)는 가능한 적게 매치합니다. 예를 들어 <b>bold</b>에서 탐욕적 /<.*>/는 전체 문자열과 일치하지만, 게으른 /<.*?>/<b>만 일치합니다.

관련 개발자 도구