공log/[JAVA]
[JAVA] 자바 #5 - 정규식
ming_OoO
2023. 10. 23. 13:49
728x90
정규식(Regular Expression)에 대한 이해
정규식(Regular Expression)은 문자열 패턴을 정의하고 검색하거나 변환하는 데 사용되는 강력한 도구입니다. 정규식은 많은 프로그래밍 언어와 텍스트 에디터에서 지원되며, 문자열 처리 작업을 효과적으로 수행하는 데 유용합니다. 다양한 종류의 정규식을 사용하여 다양한 패턴을 일치시킬 수 있습니다.
정규식의 기본 구성 요소
정규식은 다음과 같은 기본적인 구성 요소로 이루어져 있습니다:
문자 클래스 (Character Classes): [ ] 내부에 문자 집합을 나타내며, [abc]는 'a', 'b', 'c' 중 하나의 문자와 일치합니다.
- [abc]: [abc]는 'a', 'b', 또는 'c' 중 하나와 일치합니다. 이 패턴은 이 문자 중 하나가 문자열에 포함될 때 일치합니다.
- [a-z]: [a-z]는 a에서 z까지의 소문자와 일치합니다. 예를 들어, 'a', 'b', 'c'와 같은 소문자가 포함되어야 일치합니다.
- [A-Z]: [A-Z]는 A에서 Z까지의 대문자와 일치합니다.
- [0-9]: [0-9]는 0에서 9까지의 숫자와 일치합니다.
- [^abc]: [^abc]는 a, b, 또는 c가 아닌 문자와 일치합니다. ^는 문자 클래스 내에서 사용될 때 부정(negation)을 나타냅니다.
메타 문자 (Metacharacters): 특별한 의미를 가지는 문자들로, . (점), * (별표), + (플러스), ? (물음표) 등이 있습니다.
- . : .은 어떤 문자 하나와 일치합니다. 단, 줄 바꿈 문자를 제외하고 모든 문자와 일치합니다.
- * : *는 바로 앞의 패턴이 0회 이상 반복될 때 일치합니다. 예를 들어, a*는 'a', 'aa', 'aaa'와 같은 문자열과 일치합니다.
- + : +는 바로 앞의 패턴이 1회 이상 반복될 때 일치합니다.
- ? : ?는 바로 앞의 패턴이 0회 또는 1회 나타날 때 일치합니다.
앵커 (Anchors)
- ^ : ^는 문자열의 시작 부분과 일치합니다. 이것은 패턴이 문자열의 시작에서 발견되어야 함을 나타냅니다.
- $: $는 문자열의 끝 부분과 일치합니다. 패턴이 문자열의 끝에서 발견되어야 함을 나타냅니다.
반복 (Quantifiers)
- {n}: {n}은 바로 앞의 패턴이 n번 반복될 때 일치합니다. 예를 들어, [0-9]{3}은 정확히 세 자리 숫자와 일치합니다.
- {n,}: {n,}은 바로 앞의 패턴이 최소 n번 이상 반복될 때 일치합니다.
- {n,m}: {n,m}은 바로 앞의 패턴이 최소 n번 이상 최대 m번까지 반복될 때 일치합니다. 예를 들어, [a-z]{2,4}은 2에서 4개의 소문자 알파벳과 일치합니다.
그룹화 (Grouping)
- (abc): (abc)는 괄호 안의 패턴을 하나의 그룹으로 처리합니다. 그룹화를 사용하면 그룹 내의 패턴을 쉽게 참조할 수 있습니다.
문자 이스케이프 (Escape)
- \: 백슬래시는 특수 문자를 이스케이프합니다. 예를 들어, \\는 백슬래시 문자 \ 자체를 나타냅니다.
- 문자 이스케이프는 역슬래시(백슬래시) \를 사용하여 특수 문자나 메타 문자를 이스케이프하여 그 문자 자체를 나타내는 것을 말합니다. 예를 들어, \.는 점 . 문자 자체를 나타내며, \*는 별표 * 문자 자체를 나타냅니다. 문자 이스케이프는 정규식에서 특수 문자의 특별한 의미를 해제하고 실제 문자로 해석되도록 합니다.
특수 시퀀스 (Special Sequences)
- \d: 숫자와 일치합니다. **`[0-9]`**와 동일합니다.
- \w: 워드 문자와 일치합니다. **`[a-zA-Z0-9_]`**와 동일합니다.
- \s: 공백 문자와 일치합니다. (공백, 탭, 줄 바꿈 등)
- \D: 숫자가 아닌 문자와 일치합니다.
- \W: 워드 문자가 아닌 문자와 일치합니다.
- \S: 공백 문자가 아닌 문자와 일치합니다.
- 특수 시퀀스는 역슬래시 뒤에 특별한 문자로 구성된 패턴입니다. 이러한 특수 시퀀스는 특정한 문자 클래스를 나타내며, 특정 유형의 문자와 일치할 때 사용됩니다. 예를 들어, \d는 숫자에 일치하며, \w는 워드 문자에 일치하며, \s는 공백 문자에 일치합니다. 이러한 특수 시퀀스는 정규식에서 자주 사용되는 문자 클래스를 간단하게 나타내는 데 유용합니다.
대체 (Alternation)
- A|B: A|B는 A 또는 B와 일치합니다. 이것은 "A 또는 B 중 하나"라는 조건을 나타냅니다.
연속 일치 (Consecutive Matching)
- (?=...): (?=...)는 이 패턴 뒤에 오는 패턴과 연속적으로 일치합니다. 이것은 전방 탐색(lookahead)이라고도 하며, 패턴이 뒤따라 나오는 조건을 검사합니다.
- (?<=...): (?<=...)는 이 패턴 앞에 오는 패턴과 연속적으로 일치합니다. 이것은 후방 탐색(lookbehind)이라고도 하며, 패턴이 앞에 나오는 조건을 검사합니다.
다양한 정규식 종류
정규식은 다양한 종류가 있으며, 여러 패턴을 검색하고 일치시킬 수 있습니다. 몇 가지 흔한 정규식 예제는 다음과 같습니다:
1. 이메일 주소 일치: 이메일 주소를 찾는 정규식
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b
2. URL 추출: 웹 URL을 추출하는 정규식
(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]
3. 전화번호 일치: 전화번호 형식을 검색하는 정규식
\b\d{3}-\d{3}-\d{4}\b
4. 날짜 추출: 날짜 형식을 추출하는 정규식
\b\d{2}/\d{2}/\d{4}\b
5. 1에서 9 사이의 3자리 숫자인지 확인하는 정규식
^[1-9]{3}$
728x90