[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
'◽ Java language > Java Regular Expression' 카테고리의 다른 글
[Java] regular expression : "hi.*"와 "hi.+"와 "hi*" 차이는? (0) | 2023.05.03 |
---|