본문으로 건너뛰기

반복 찾기

하나 이상의 문자 찾기

더하기 +는 하나 이상의 문자를 찾습니다.

문자 집합에 +를 사용할 때는 +를 집합 바깥에 두어야 합니다.

[0-9+] - 숫자 0부터 9와 문자 더하기를 집합으로 정의한 것

✔️ [0-9]+ - 의도에 맞는 것

예시:

이메일 주소
html
\w+@\w+\.\w+
이메일 주소
html
\w+@\w+\.\w+

문자가 없거나 하나 이상 연속하는 문자 찾기

별표 *는 문자가 없거나 하나 이상 연속하는 문자를 찾습니다.

*는 주어진 문자가 있는 경우에 일치시키는 선택적 메타 문자로 생각할 수 있습니다.

예시:

이메일 주소
html
\w+[\w.]*@[\w.]+\.\w+
이메일 주소
html
\w+[\w.]*@[\w.]+\.\w+

문자가 없거나 하나인 문자 찾기

물음표 ?는 문자가 없거나 하나인 문자를 찾습니다.

예시:

URL
html
https?:\/\/[\w.\/]+
URL
html
https?:\/\/[\w.\/]+
유닉스 환경에서 빈 줄
html
[\r]?\n[\r]?\n
유닉스 환경에서 빈 줄
html
[\r]?\n[\r]?\n

[\r]?\r?과 같은 기능을 하지만 뒤에 나오는 메타 문자가 어디에 적용되는지 확실하게 하기 위해 사용하기도 합니다.

구간 지정하기

문자가 일치하는 수를 정확히 정하려면 중괄호 {}를 사용해 구간(interval)을 표현합니다.

예시:

RGB 값
html
[A-Fa-f0-9]{6}
RGB 값
html
[A-Fa-f0-9]{6}

구간에 두 개의 숫자를 넣으면 일치 횟수의 범위를 지정할 수 있습니다. 즉 일치 횟수의 최솟값과 최댓값을 지정합니다.

예시:

날짜
html
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
날짜
html
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}

구간은 0부터 시작할 수 있습니다. ?{0,1}과 동일한 기능을 합니다.

최솟값만 지정하는 것도 가능합니다. {3,}과 같이 작성할 수 있습니다. +{1,}과 동일한 기능을 합니다.

예시:

\d+: \$\d{3,}\.\d{2}
\d+: \$\d{3,}\.\d{2}

과하게 일치하는 상황 방지하기

탐욕적 수량자게으른 수량자
**?
++?
{n,}{n,}?

다음 예시에서는 <b>로 둘러싸인 텍스트를 일치시키고자 합니다.

living in <b>AK</b> and <b>HI</b>.
living in <b>AK</b> and <b>HI</b>.

탐욕적(greedy) 수량자를 이용해 정규 표현식을 작성하면 <[Bb]>.*<\/[Bb]>이며 그 결과는 <b>AK</b> and <b>HI</b>입니다.

대신 게으른(lazy) 수량자를 이용해 정규 표현식을 작성하면 <[Bb]>.*?<\/[Bb]>이며 그 결과는 <b>AK</b><b>HI</b>로 원하는 결과를 얻습니다.