반복 찾기
하나 이상의 문자 찾기
더하기 +
는 하나 이상의 문자를 찾습니다.
문자 집합에 +
를 사용할 때는 +
를 집합 바깥에 두어야 합니다.
❌ [0-9+]
- 숫자 0부터 9와 문자 더하기를 집합으로 정의한 것
✔️ [0-9]+
- 의도에 맞는 것
예시:
이메일 주소html
\w+@\w+\.\w+
이메일 주소html
\w+@\w+\.\w+
문자가 없거나 하나 이상 연속하는 문자 찾기
별표 *
는 문자가 없거나 하나 이상 연속하는 문자를 찾습니다.
*
는 주어진 문자가 있는 경우에 일치시키는 선택적 메타 문자로 생각할 수 있습니다.
예시:
이메일 주소html
\w+[\w.]*@[\w.]+\.\w+
이메일 주소html
\w+[\w.]*@[\w.]+\.\w+
문자가 없거나 하나인 문자 찾기
물음표 ?
는 문자가 없거나 하나인 문자를 찾습니다.
예시:
URLhtml
https?:\/\/[\w.\/]+
URLhtml
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>
로 원하는 결과를 얻습니다.