본문 바로가기
프로그래밍/Back-end

Java에서 정규식(Regex) 사용법과 메타문자 소개

by @GodWin 2024. 11. 15.

-

-

정규식(정규 표현식)은 문자열을 패턴에 맞춰 검색하거나 수정하는 데 매우 유용한 도구입니다. 예를 들어, 이메일 주소가 맞는 형식인지 확인하거나, 특정 단어를 찾아서 다른 텍스트로 교체할 때 활용할 수 있죠. 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. 정규식 활용 팁

정규식은 매우 강력하지만, 처음에 접근할 때는 조금 어려울 수 있습니다. 하지만 몇 가지 팁을 알면 훨씬 더 쉽게 다룰 수 있죠!

  1. 백슬래시 이스케이프 처리: Java 문자열에서는 \를 이스케이프 문자로 사용해야 하기 때문에, 정규식에서 \d, \w 등을 사용하려면 \\d, \\w와 같이 두 번 써야 합니다.
  2. 정규식 테스트 도구 활용하기: 정규식을 작성할 때는 온라인 정규식 테스트 도구를 활용하는 것이 매우 유용합니다. 예를 들어, regex101에서는 정규식을 실시간으로 테스트하고, 그 동작을 확인할 수 있습니다.
  3. 정규식 최적화: 복잡한 정규식은 성능에 영향을 미칠 수 있기 때문에, 가능한 한 간단하고 명확한 정규식을 사용하는 것이 좋습니다. 예를 들어, 지나치게 긴 반복 패턴이나 복잡한 그룹화는 피하는 것이 좋습니다.

정규식은 Java에서 문자열을 처리할 때 매우 유용한 도구입니다. 패턴 매칭, 검색, 대체 작업을 통해 코드의 효율성과 가독성을 크게 향상시킬 수 있습니다. 위에서 살펴본 메타문자들을 기억하고, 다양한 예시를 통해 연습해 보세요! 정규식을 잘 활용하면 문자열 관련 작업이 훨씬 더 간편해질 것입니다.

정규식을 처음 접하는 분들에게는 조금 헷갈릴 수도 있지만, 여러 번 써보고 실습해 보면 점점 익숙해지실 거예요. 😊