Spring

Regex (정규 표현식) #Java로 regex 이용하기

검은고양이개발자 2023. 2. 19. 14:06
반응형

정규표현식 기본 개념


정규표현식은 패턴이나 규칙을 나타내는 문자열입니다. 이 문자열은 검색하거나 치환하려는 대상 문자열과 함께 사용됩니다. 정규표현식에서 사용되는 특수문자는 일반적인 문자열과는 다르며, 이러한 특수문자를 메타문자라고 합니다.

정규표현식에서 사용되는 일반적인 메타문자는 다음과 같습니다.

 

  • . : 임의의 한 문자를 의미합니다.
  • * : 앞의 문자가 0개 이상 나타남을 의미합니다.
  • + : 앞의 문자가 1개 이상 나타남을 의미합니다.
  • ? : 앞의 문자가 0개 또는 1개 나타남을 의미합니다.
  • \d : 숫자를 의미합니다.
  • \w : 알파벳, 숫자, 밑줄 문자를 의미합니다.
  • [] : 대괄호 안의 문자 중 하나와 일치합니다.
  • () : 괄호 안의 문자열을 그룹화합니다.

 

 

 

정규표현식 사용 예제


1. 전화번호 추출

정규표현식을 사용하여 이메일 주소를 검사할 수 있습니다. 이메일 주소는 username@domain.com과 같은 형식으로 되어 있으므로, @ 기호를 사용하여 문자열을 분리할 수 있습니다.\

 

2. 이메일 추출

정규표현식을 사용하여 문자열에서 전화번호를 추출할 수 있습니다. 전화번호는 일반적으로 010-1234-5678과 같은 형식으로 표현되며, 하이픈으로 구분됩니다.

 

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        // 검색할 문자열
        String text = "Hello, my phone number is 123-456-7890. Please call me back " +
                " My email is example123@gmail.com. Please contact me.";


        // 패턴 지정
        String patternPhone = "\\d{3}-\\d{3}-\\d{4}";
        String patternEmail = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b";

        // 패턴 객체 생성
        Pattern p = Pattern.compile(patternPhone);
        Pattern e = Pattern.compile(patternEmail);

        // 문자열에서 패턴 검색
        Matcher m1 = p.matcher(text);
        Matcher m2 = e.matcher(text);

        // 검색된 패턴 추출
        while (m1.find()) {
            String phoneNumber = m1.group();
            System.out.println("Phone number found: " + phoneNumber);
        }
        while (m2.find()){
            String email=m2.group();
            System.out.println("Email found " + email);
        }
    }
}

 

 

 

 

정규표현식 문법


1. 문자 클래스

문자 클래스는 [ ] 사이에 들어가며, 해당 문자 클래스에 속한 문자 중 하나와 매치되는 것을 의미합니다.

  • [abc]: a, b, c 중 하나와 매치
  • [a-z]: a부터 z까지 중 하나와 매치
  • [A-Z]: A부터 Z까지 중 하나와 매치
  • [0-9]: 0부터 9까지 중 하나와 매치
  • [가-힣]: 가부터 힣까지 중 하나와 매치
  • [^a-z]: a부터 z까지 문자가 아닌 것과 매치

 

2. 반복자

반복자는 { } 안에 숫자를 넣어서 해당 문자 또는 문자 클래스가 나타나는 횟수를 지정합니다.

  • a{3}: a가 3번 나타나는 것과 매치
  • a{2,4}: a가 2번 이상 4번 이하로 나타나는 것과 매치
  • a{2,}: a가 2번 이상 나타나는 것과 매치
  • a+: a가 1번 이상 나타나는 것과 매치
  • a*: a가 0번 이상 나타나는 것과 매치
  • a?: a가 0번 또는 1번 나타나는 것과 매치

 

3. 그룹

그룹은 ( ) 안에 들어가며, 해당 그룹 내의 패턴과 매치되는 문자열을 추출할 수 있습니다.

  • (ab)+: ab가 1번 이상 연속해서 나타나는 것과 매치 (ex. abab, ababab)
  • (a|b)+: a 또는 b가 1번 이상 연속해서 나타나는 것과 매치 (ex. a, b, aa, ab, ba, bb)
  • ([a-z]+) \1: a부터 z까지의 소문자가 1번 이상 나타나고, 그 다음에 나타나는 같은 문자열과 매치 (ex. abab, baba, cccc)

 

4. 앵커

앵커는 문자열의 특정 위치에 매치됩니다.

  • ^a: 문자열의 시작부터 a와 매치
  • a$: 문자열의 끝부분에 a와 매치
  • \b: 단어의 경계(boundary)에 매치

 

5. 특수 문자

  • \d: 숫자와 매치
  • \D: 숫자가 아닌 것과 매치
  • \w: 숫자와 문자, 언더스코어(_)와 매치
  • \W: 숫자와 문자, 언더스코어(_)가 아닌 것과 매치
  • \s: 공백 문자와 매치
  • \S: 공백 문자가 아닌 것과 매치
  • .: 줄바꿈 문자를 제외한 모든 문자와 매치

 

 

 

https://regexr.com/ 이 사이트를 통해 정규표현식을 사용해볼 수 있습니다!

반응형