◽ Java language/Java Regular Expression

[Java] 정규식 regular expression


정규식(regular expressions)

  자바에서 정규식(regular expressions)을 사용하는 방법에 대해 간단히 알아보려고 한다. 정규식은 문자열 패턴을 정의하고 검색, 대체 및 분할하는 데 유용한 도구인데 자바에서는 java.util.regex 패키지를 사용하여 정규식을 처리할 수 있기 때문에 정규식을 어떻게 사용하고 정규식이 어떻개 매칭되는지 알아야 문자열 검색이나 문자열 처리에 수월하게 접근할 수 있다.

 

  이 글에서는 Pattern과 Matcher 클래스를 사용하는 부분을 집중적으로 정리할 예정인데, 사실 자바에서 정규식을 사용하면 이 2가지 클래스를 이용하는게 대다수이다.


1. 정규식 패턴 생성하기

  자바에서 정규식 패턴을 생성하려면 Pattern 클래스의 compile() 메서드를 사용하는데, 이 메서드는 정규식 패턴 문자열을 입력 받아 Pattern 객체를 반환하는 작업을 하는 메서드이다.

  예제에서는 숫자 3개, 하이픈, 숫자 2개, 하이픈, 숫자 4개로 이루어진 문자열 패턴(예: 123-45-6789)을 정의한 것입니다.

1
2
3
4
5
6
7
8
import java.util.regex.Pattern;
 
public class Test {
    public static void main(String[] args) {
        String regex = "\\d{3}-\\d{2}-\\d{4}";
        Pattern pattern = Pattern.compile(regex);
    }
}
cs

 

 

2. 패턴과 일치하는 문자열 찾기

 Pattern 객체를 사용하여 문자열에서 패턴과 일치하는 부분을 찾으려면 Matcher 클래스를 사용해야하고 Pattern 객체의 matcher() 메서드를 사용하여 Matcher 객체를 생성할 수 있다.

  예제에서는 input 문자열에서 정규식 패턴과 일치하는 부분을 찾고, matcher.find() 메서드를 사용하여 일치하는 부분이 있는지 확인하고, matcher.group() 메서드를 사용하여 일치하는 부분을 가져오는 예제인데 아래를 참고.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.regex.Pattern;
import java.util.regex.Matcher;
 
public class Test {
    public static void main(String[] args) {
        String regex = "\\d{3}-\\d{2}-\\d{4}";
        Pattern pattern = Pattern.compile(regex);
 
        String input = "My Social Security Number is 123-45-6789";
        Matcher matcher = pattern.matcher(input);
 
        if (matcher.find()) {
            System.out.println("Found a match: " + matcher.group());
        } else {
            System.out.println("No match found");
        }
    }
}
cs

 

 

3. 정규식 주요 표현

  • 문자열 매칭
    • 단순 문자: 정확히 일치하는 문자
    • 마침표(.): 임의의 한 문자
    • 대괄호([]): 대괄호 안에 있는 문자 중 하나와 일치
    • 하이픈(-): 범위를 표시하는 데 사용
    • 캐럿(^): 문자열이나 문자 집합의 처음과 일치
    • 달러 기호($): 문자열이나 문자 집합의 끝과 일치
  • 반복
    • 별표(*): 0회 이상 반복
    • 더하기(+): 1회 이상 반복
    • 물음표(?): 0회 또는 1회 반복
    • 중괄호({}): 특정 회수 반복
  • 특수 문자
    • 백슬래시(): 다른 특수 문자와 조합하여 특별한 의미를 갖게 함
    • 수직 막대(|): OR 조건
    • 괄호(()): 그룹핑
  • 문자 클래스
    • \d: 숫자와 일치
    • \D: 숫자가 아닌 문자와 일치
    • \w: 알파벳, 숫자, 밑줄과 일치
    • \W: 알파벳, 숫자, 밑줄이 아닌 문자와 일치
    • \s: 공백 문자와 일치
    • \S: 공백 문자가 아닌 문자와 일치
  • 전방탐색과 후방탐색
    • 전방탐색(?=): 일치하는 문자열 바로 앞에서 검색
    • 후방탐색(?<=): 일치하는 문자열 바로 뒤에서 검색

참고 :

-  https://codechacha.com/ko/java-regex/

- https://www.w3schools.com/java/java_regex.asp


 

푸터바