6.0 KiB
6.0 KiB
자바 정규 표현식(Regex) 쉽게 배우기
자바에서는 정규 표현식(Regex)을 문자열 검색, 패턴 매칭, 텍스트 변환 등에 사용할 수 있다.
정규 표현식을 활용하면 복잡한 문자열을 간단한 패턴으로 처리할 수 있다.
자바에서 정규 표현식을 다룰 때 주로 사용하는 클래스는 Pattern과 Matcher이다.
또한, String 클래스에서도 정규 표현식을 지원하는 몇 가지 메서드가 있다.
1. 주요 클래스 및 메서드 정리
(1) Pattern 클래스 (정규식 컴파일)
| 메서드 | 설명 |
|---|---|
Pattern.compile(String regex) |
정규식을 컴파일하여 Pattern 객체 생성 |
Pattern.matches(String regex, CharSequence input) |
전체 문자열이 정규식과 일치하는지 확인 |
pattern() |
정규식을 문자열 형태로 반환 |
split(CharSequence input) |
정규식을 기준으로 문자열을 분리 |
matcher(CharSequence input) |
Matcher 객체를 생성하여 세부적인 패턴 검색 수행 |
사용 예시:
Pattern pattern = Pattern.compile("\\d+"); // 숫자 찾기
Matcher matcher = pattern.matcher("abc123");
System.out.println(matcher.find()); // true
(2) Matcher 클래스 (패턴 검색)
| 메서드 | 설명 |
|---|---|
find() |
정규식과 일치하는 부분이 있는지 확인 |
matches() |
전체 문자열이 정규식과 일치하는지 확인 |
lookingAt() |
문자열의 시작 부분이 정규식과 일치하는지 확인 |
group() |
최근에 매칭된 문자열을 반환 |
group(int group) |
특정 그룹의 매칭 결과를 반환 |
start() |
매칭된 문자열의 시작 인덱스 반환 |
end() |
매칭된 문자열의 끝 인덱스 반환 |
replaceAll(String replacement) |
모든 매칭된 부분을 대체 |
replaceFirst(String replacement) |
첫 번째 매칭된 부분만 대체 |
사용 예시:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("abc123xyz456");
while (matcher.find()) {
System.out.println("찾은 숫자: " + matcher.group());
}
출력 결과:
찾은 숫자: 123
찾은 숫자: 456
→ find()를 사용하면 여러 번 매칭 가능.
(3) String 클래스의 정규 표현식 관련 메서드
| 메서드 | 설명 |
|---|---|
matches(String regex) |
전체 문자열이 정규식과 일치하는지 확인 |
split(String regex) |
정규식을 기준으로 문자열을 분리하여 배열 반환 |
replaceAll(String regex, String replacement) |
모든 매칭된 부분을 대체 |
replaceFirst(String regex, String replacement) |
첫 번째 매칭된 부분만 대체 |
사용 예시:
String text = "apple,banana,grape";
String[] fruits = text.split(",");
for (String fruit : fruits) {
System.out.println(fruit);
}
출력 결과:
apple
banana
grape
→ split()을 사용하면 쉼표(,)를 기준으로 문자열을 쉽게 분리할 수 있다.
2. 정규 표현식 쉽게 설명하기
정규 표현식은 특정한 패턴을 가진 문자열을 검색하고, 추출하고, 변환할 수 있는 도구이다.
아래는 자주 사용하는 정규 표현식 패턴이다.
| 정규식 | 설명 | 예제 |
|---|---|---|
. |
임의의 한 글자 | a.b → "acb", "a1b" (O) / "ab", "acdb" (X) |
\d |
숫자 (0-9) | \d+ → "123", "4567" |
\D |
숫자가 아닌 문자 | \D+ → "abc", "!@#" |
\w |
알파벳, 숫자, _ |
\w+ → "hello_123" |
\W |
알파벳, 숫자, _ 제외한 문자 |
\W+ → "!@#" |
\s |
공백 (스페이스, 탭, 줄바꿈) | \s+ → " " |
\S |
공백이 아닌 문자 | \S+ → "Hello" |
^ |
문자열의 시작 | ^abc → "abcdef" (O) / "zabc" (X) |
$ |
문자열의 끝 | xyz$ → "abcxyz" (O) / "xyzabc" (X) |
* |
0개 이상 반복 | a* → "", "a", "aa", "aaaa" |
+ |
1개 이상 반복 | a+ → "a", "aa", "aaaa" (O) / "" (X) |
? |
0개 또는 1개 | a? → "", "a" |
{n} |
정확히 n번 반복 | a{3} → "aaa" |
{n,} |
최소 n번 반복 | a{2,} → "aa", "aaa", "aaaa" |
{n,m} |
n번 이상 m번 이하 반복 | a{2,4} → "aa", "aaa", "aaaa" |
3. 자주 쓰는 정규식 예제
(1) 이메일 검증
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$";
String email = "test@example.com";
boolean isValid = Pattern.matches(regex, email);
System.out.println("이메일 검증: " + isValid); // true
→ 이메일 형식인지 확인할 때 사용.
(2) 전화번호 검증 (010-xxxx-xxxx)
String regex = "^010-\\d{4}-\\d{4}$";
String phone = "010-1234-5678";
boolean isValid = Pattern.matches(regex, phone);
System.out.println("전화번호 검증: " + isValid); // true
→ 010-xxxx-xxxx 형식의 전화번호인지 확인.
(3) 숫자만 포함된 문자열 체크
String regex = "^\\d+$";
String input = "123456";
boolean isNumber = Pattern.matches(regex, input);
System.out.println("숫자만 포함?: " + isNumber); // true
→ 숫자로만 이루어진 문자열인지 검증할 때 사용.
(4) 특정 문자 제거 (replaceAll())
String text = "Hello123World";
String result = text.replaceAll("\\d", ""); // 숫자 제거
System.out.println(result); // "HelloWorld"
→ 숫자(\d)를 찾아서 제거.
4. 정리
✅ 정규 표현식을 사용하면 복잡한 문자열 처리를 간단하게 해결 가능!
✅ Pattern & Matcher 클래스를 사용하면 세부적인 패턴 매칭이 가능!
✅ String 클래스에서도 matches(), split(), replaceAll() 등을 활용할 수 있음!
즉, 자바의 정규 표현식 API를 잘 활용하면 문자열 검색, 치환, 검증이 훨씬 쉬워진다!