목차
05. 반복 찾기
문자 하나 이상 찾기
문자가 없거나 하나인 문자 찾기
구간 지정하기
과하게 일치하는 상황 방지하기
05. 반복 찾기
2022년 9월 9일
문자 하나 이상 찾기
- 더하기(+)는 문자가 최소 하나 이상일 때 일치함
- 별표(*)는 문자가 0개 이상일 때 일치함(있어도 없어도 됨)
📌 메타문자이다(더하기(+) 나 별표(*) 그대로 찾기 위해선 이스케이프(\)해야함)
| 예시 | 설명 |
|---|
\w+ | 최소 1개 이상 일치 하는 영숫자 |
[\w.]+ | 영숫자와 (.)중 최소 1개 이상 일치 |
\w* | 최소 0개 이상 일치 하는 영숫자 |
문자가 없거나 하나인 문자 찾기
- 물음표(?) 문자가 0 또는 1개일 때 일치함
📌 메타문자이다(물음표(?) 그대로 찾기 위해선 이스케이프(\)해야함)
| 예시 | 설명 |
|---|
https?: | http: 또는 https: / s가 있는지 없는지 여부를 따짐 |
구간 지정하기
정확히 원하는 만큼만 일치하도록 문자수를 정의하기 위해선
중괄호({})를 사용함
📌 메타문자이다(중괄호({}) 그대로 찾기 위해선 이스케이프(\\)해야함)
| 예시 | 설명 |
|---|
\d{3} | 6자리의 숫자를 찾아냄 |
\d{1,3} | 한자리에서 3자리 숫자를 찾아냄 |
\d{3,} | 최소 3자리의 숫자를 찾아냄 |
과하게 일치하는 상황 방지하기
물음표(?)는 구간을 쓰면 정확히 지정한 만큼 일치하거나 지정한 범위 안애서만 검색을 수행함
예시비교
- 예시
<[B]>Ak</[B]>and<[B]>HI</[B]>
| 대입식 | 찾아내는 값 |
|---|
<[Bb]>.*</[Bb]> | <[B]>Ak</[B]>and<[B]>HI</[B]> |
<[Bb]>.*?</[Bb]> | <[B]>Ak</[B]></mark>and<mark><[B]>HI</[B]> |
- 탐욕적(greedy)
별표(*)나 더하기(+) 같은 메타문자는 탐욕적이기 때문에, 가능한 가장 큰 한 덩어리를 찾으려고 함 -> 텍스트 마지막에서 시작해 거꾸로 찾음
- 게으른(lazy)
문자가 최소한으로 일치함. 기존 수량자 뒤에 물음표(?)를 붙여서 표현
| 탐욕적 수량자 | 게으른 수량자 |
|---|
* | *? |
+ | +? |
{n,} | {n,}? |