-
-
정규식(정규 표현식)은 문자열을 패턴에 맞춰 검색하거나 수정하는 데 매우 유용한 도구입니다. 예를 들어, 이메일 주소가 맞는 형식인지 확인하거나, 특정 단어를 찾아서 다른 텍스트로 교체할 때 활용할 수 있죠. Java에서는 java.util.regex 패키지를 사용하여 정규식을 처리합니다. 이 패키지의 두 핵심 클래스는 Pattern과 Matcher입니다. 이들을 이용하면 문자열을 정규식으로 쉽게 처리할 수 있습니다.
이번 포스트에서는 Java에서 정규식을 사용할 때 자주 쓰이는 메타문자(문자 패턴을 정의하는 특수한 문자들)를 표로 정리해 드리겠습니다. 이를 통해 정규식의 기본 개념과 사용법을 한눈에 이해할 수 있도록 도와드릴게요!
1. 정규식의 메타문자 (Metacharacters)
정규식에서 메타문자는 문자열 패턴을 정의하고 조작하는 데 사용되는 특수 문자입니다. 각각의 메타문자는 다양한 방식으로 문자열을 찾아내거나 대체하는 데 중요한 역할을 합니다. 자, 그럼 자주 쓰이는 메타문자들을 표로 살펴볼까요?
. | 임의의 한 문자 (단, 줄 바꿈 문자 제외) | a.b | a와 b 사이에 한 문자가 있으면 매칭. axb, acb 등. |
^ | 문자열의 시작 | ^abc | 문자열이 abc로 시작하는 경우에만 매칭. "abc123", "abcdef" 등. |
$ | 문자열의 끝 | abc$ | 문자열이 abc로 끝나는 경우에만 매칭. "123abc", "testabc" 등. |
[] | 문자 집합 (괄호 안의 문자들 중 하나와 매칭) | [aeiou] | 소문자 모음 중 하나와 매칭. "a", "e", "i" 등. |
` | ` | OR 조건 (둘 중 하나) | `abc |
() | 그룹화 (괄호 안의 내용을 그룹으로 묶기) | (abc)+ | abc가 하나 이상 반복되는 경우에 매칭. "abc", "abcabc", "abcabcabc" 등. |
* | 0회 이상 반복 | a* | a가 0번 이상 반복되는 경우에 매칭. "", "a", "aa", "aaa" 등. |
+ | 1회 이상 반복 | a+ | a가 1번 이상 반복되는 경우에 매칭. "a", "aa", "aaa" 등. |
? | 0회 또는 1회 등장 | a? | a가 없거나 1번만 있는 경우에 매칭. "", "a" 등. |
{n} | 정확히 n번 반복 | a{3} | a가 정확히 3번 반복되는 경우에 매칭. "aaa" |
{n,m} | n번 이상 m번 이하 반복 | a{2,4} | a가 2번 이상 4번 이하 반복되는 경우에 매칭. "aa", "aaa", "aaaa" |
\\d | 숫자 (0-9) | \\d+ | 하나 이상의 숫자와 매칭. "123", "9876", "42" 등. |
\\w | 단어 문자 (영문 대소문자, 숫자, _) | \\w+ | 하나 이상의 단어 문자와 매칭. "hello", "world_123" 등. |
\\s | 공백 문자 (공백, 탭, 줄 바꿈 등) | \\s+ | 하나 이상의 공백 문자와 매칭. " ", "\t", "\n" 등. |
2. 자주 사용되는 정규식 예시
정규식 메타문자들을 좀 더 쉽게 이해하려면 몇 가지 실용적인 예시를 통해 살펴보는 것이 좋습니다. 여기서는 이메일 주소, 전화번호, 그리고 URL을 검증하는 간단한 정규식을 소개합니다.
이메일 주소 검증
String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
- ^[a-zA-Z0-9._%+-]+ : 이메일 아이디 부분은 영문 대소문자, 숫자, 특수 문자 (., _, %, +, -) 등을 포함할 수 있습니다.
- @[a-zA-Z0-9.-]+ : @ 뒤에는 도메인 이름이 와야 하며, 도메인 내에는 영문 대소문자, 숫자, 점(.), 하이픈(-) 등이 포함됩니다.
- \\.[a-zA-Z]{2,}$ : 도메인 뒤에는 최소 2자리 이상의 영문 알파벳이 와야 합니다 (예: .com, .org, .net).
전화번호 검증
String phoneRegex = "^01[0-9]-[0-9]{3,4}-[0-9]{4}$";
- ^01[0-9] : 전화번호는 01로 시작하며, 그 뒤에는 또 다른 숫자 (0에서 9까지) 한 자리가 옵니다.
- [0-9]{3,4} : 그다음에는 3자리 또는 4자리 숫자가 옵니다.
- [0-9]{4}$ : 마지막에는 4자리 숫자가 옵니다.
URL 검증
String urlRegex = "^(https?|ftp)://[a-zA-Z0-9.-]+(?:/[a-zA-Z0-9&%=+-]*)?$";
- ^(https?|ftp) : URL이 http 또는 ftp로 시작해야 합니다.
- ://[a-zA-Z0-9.-]+ : 그 뒤에는 도메인 이름이 와야 하며, 도메인 내에는 영문 대소문자, 숫자, 점(.), 하이픈(-)이 포함됩니다.
- (?:/[a-zA-Z0-9&%=+-]*)?$ : URL의 나머지 부분은 선택적으로 /로 시작하여 다양한 문자를 포함할 수 있습니다.
3. 정규식 활용 팁
정규식은 매우 강력하지만, 처음에 접근할 때는 조금 어려울 수 있습니다. 하지만 몇 가지 팁을 알면 훨씬 더 쉽게 다룰 수 있죠!
- 백슬래시 이스케이프 처리: Java 문자열에서는 \를 이스케이프 문자로 사용해야 하기 때문에, 정규식에서 \d, \w 등을 사용하려면 \\d, \\w와 같이 두 번 써야 합니다.
- 정규식 테스트 도구 활용하기: 정규식을 작성할 때는 온라인 정규식 테스트 도구를 활용하는 것이 매우 유용합니다. 예를 들어, regex101에서는 정규식을 실시간으로 테스트하고, 그 동작을 확인할 수 있습니다.
- 정규식 최적화: 복잡한 정규식은 성능에 영향을 미칠 수 있기 때문에, 가능한 한 간단하고 명확한 정규식을 사용하는 것이 좋습니다. 예를 들어, 지나치게 긴 반복 패턴이나 복잡한 그룹화는 피하는 것이 좋습니다.
정규식은 Java에서 문자열을 처리할 때 매우 유용한 도구입니다. 패턴 매칭, 검색, 대체 작업을 통해 코드의 효율성과 가독성을 크게 향상시킬 수 있습니다. 위에서 살펴본 메타문자들을 기억하고, 다양한 예시를 통해 연습해 보세요! 정규식을 잘 활용하면 문자열 관련 작업이 훨씬 더 간편해질 것입니다.
정규식을 처음 접하는 분들에게는 조금 헷갈릴 수도 있지만, 여러 번 써보고 실습해 보면 점점 익숙해지실 거예요. 😊
'프로그래밍 > Back-end' 카테고리의 다른 글
자바에서 소수점 버림 처리하는 다양한 방법 (0) | 2024.11.18 |
---|---|
자바에서 소수점 올림과 반올림 처리하는 다양한 방법 (0) | 2024.11.16 |
자바에서 서버의 호스트명을 가져오는 방법 (0) | 2024.11.13 |
자바에서 경로 다루기: File, Request, Session을 활용한 경로 처리 방법 (0) | 2024.11.12 |
자바 AWS SNS ( Amazon Simple Notification Service ) ! 아마존 문자 서비스 구현 ! (0) | 2024.10.25 |
자바 AWS SES ( Amazon Simple Email Service ) 아마존 이메일 서비스 구현 ! (0) | 2024.10.25 |
JPA 쿼리 JPQL 벌크 연산 (0) | 2024.10.24 |
JPA 쿼리 패치 조인 JPQL FETCH JOIN (0) | 2024.10.24 |