정규표현식(Regex)이란?
정규표현식은 문자열에서 일정한 규칙을 가진 텍스트 패턴을 표현하는 식입니다.
- 특정 단어나 문자를 찾거나
- 문자열을 원하는 형식으로 바꾸거나
- 데이터 검증, 파싱 등에 폭넓게 사용됩니다.
정규표현식을 사용하면 반복적이고 복잡한 문자열 처리 작업을 간결하게 해결할 수 있습니다.
1. 정규표현식 기본 문법
패턴 | 설명 | 예시 |
---|---|---|
. |
임의의 문자 1개 (줄 바꿈 제외) | a.b → a와 b 사이 임의 문자 1개 |
^ |
문자열 시작 위치 | ^Hello → "Hello"로 시작하는 문자열 |
$ |
문자열 종료 위치 | end$ → "end"로 끝나는 문자열 |
* |
앞 문자가 0번 이상 반복 | ho* → h 다음에 o가 0개 이상 |
+ |
앞 문자가 1번 이상 반복 | ho+ → h 다음에 o가 1개 이상 |
? |
앞 문자가 있을 수도, 없을 수도 있음 | colou?r → color 또는 colour 일치 |
{n} |
앞 문자가 정확히 n번 반복 | a{3} → aaa 와 일치 |
{n,} |
앞 문자가 n번 이상 반복 | a{2,} → aa, aaa, aaaa 등 |
{n,m} |
앞 문자가 n번 이상 m번 이하 반복 | a{2,4} → aa, aaa, aaaa 중 일치 |
[abc] |
a, b, c 중 하나와 일치 | b 와 일치 |
[^abc] |
a, b, c가 아닌 문자와 일치 | d 와 일치 |
(ab|cd) | ab 또는 cd와 일치 | |
\ |
이스케이프 문자 (특수문자를 문자로 인식) | \. → 문자 '.' 와 일치 |
2. 문자 클래스(Character Classes)
문자 클래스는 대괄호 []
에 문자들을 넣어서 그 중 한 문자와 매치시키는 방식을 말합니다.
[abc]
: a, b, c 중 하나[a-z]
: a부터 z까지 소문자 중 하나[A-Z]
: 대문자 중 하나[0-9]
: 숫자 중 하나[^0-9]
: 숫자가 아닌 문자 중 하나
3. 앵커(Anchor)
문자열의 시작과 끝을 지정하여 위치 매칭을 할 수 있습니다.
^
: 문자열 시작 위치$
: 문자열 끝 위치
예) ^Hello
는 "Hello"로 시작하는 문자열과, world$
는 "world"로 끝나는 문자열과 일치합니다.
4. 특수문자 이스케이프
정규식에서 특수한 의미를 갖는 문자를 문자 그대로 사용하고 싶을 때는 앞에 \
를 붙입니다.
예)
문자 | 의미 | 문자 그대로 표현 |
---|---|---|
. | 임의의 문자 1개 | \. |
* | 0번 이상 반복 | \* |
+ | 1번 이상 반복 | \+ |
? | 0 또는 1개 | \? |
^ | 문자열 시작 | \^ |
$ | 문자열 끝 | \$ |
\ | 이스케이프 문자 | \\ |
[ ] | 문자 클래스 | $$ $$ |
( ) | 그룹 | $$ , $$ |
5. 그룹과 캡처, 또는(OR)
- 소괄호
( )
는 여러 문자를 하나의 그룹으로 묶어 처리할 수 있습니다. - 그룹 내에서
|
를 쓰면 OR 조건이 됩니다.
예) (cat|dog)
는 cat
또는 dog
와 매치됩니다.
6. 자주 사용하는 이스케이프 시퀀스
\d
: 숫자[0-9]
와 동일\D
: 숫자가 아닌 문자와 일치\w
: 알파벳 대소문자, 숫자, 언더스코어_
와 일치\W
:\w
에 해당하지 않는 문자와 일치\s
: 공백 문자 (space, tab 등)\S
: 공백이 아닌 문자
📖마무리
정규표현식은 익숙해지면 데이터 검증, 문자열 변환, 로그 분석, 웹 크롤링 등 다양한 분야에서 매우 유용한 도구입니다.
처음엔 복잡하지만, 기본 문법부터 하나씩 익히면 곧 강력한 텍스트 처리 실력을 갖출 수 있습니다.
이번 기회에 학습하여 코딩테스트 등 다양한 곳에서 활용해보도록 노력합시다!!
'Backend > Java' 카테고리의 다른 글
[Java] switch 문 최신 문법까지 정리해보기 (Java 14+) (0) | 2025.07.29 |
---|---|
[Java] replace()와 replaceAll()의 차이점 (0) | 2025.07.22 |
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리 (0) | 2025.07.16 |
[Java] 배열 복사 메서드 간단 정리 (0) | 2025.07.15 |
[Java, String] split() 메서드 정리 - 문자열 자르기 (0) | 2025.07.13 |