정규 표현식; 자바 정규식을 활용해서 문자열을 손쉽게 처리하는 방법
개발 테크
2024. 04. 30
조회수
3,593

정규-표현식

잘 만들어진 웹 페이지나 애플리케이션은 e-mail이나 핸드폰 번호, 주소 등의 입력이 필요한 경우, 사용자가 올바르게 입력했는지 확인하여 잘못된 값이 입력되면 다시 입력하도록 요청합니다. 올바른 데이터가 입력되도록 시스템이 잘 갖춰졌기 때문입니다.

위의 예시와 같이 특정 문자열에서 특정 패턴을 검색하거나 특정 부분을 찾아 변경(치환) 해야 할 경우, 복잡한 코딩을 입력하지 않아도 간단하게 처리하는 방법이 있습니다. 바로 ‘정규 표현식’을 사용하는 것입니다.

정규 표현식(Regular Expression)은 문자열을 더 정교하게 찾고 특정 문자만 찾아서 바꾸어야 할 때 효과적으로 사용할 수 있는데요.

이번 시간에는 특별히 문자열 검색 및 처리에 유용한 정규 표현식이란 무엇인지 그리고 자바에서는 어떻게 사용해야 하는지에 대해 대한민국 No.1 IT 인재 매칭 플랫폼 이랜서에서 개발 시간을 단축하는 데 도움이 되는 ‘정규 표현식 사용법’에 대해 알려드리겠습니다.

 

 

정규 표현식(Regular Expression)이란?

정규-표현식-사이트

정규 표현식(Regular Expression)은 줄여서 ‘정규식(regexp)’이라고 하며, 과거부터 vi 같은 텍스트 에디터의 문자열 검색에 주로 사용되어 왔습니다. 

자바를 비롯한 여러 프로그램 언어에서도 문자열을 찾거나 치환하기 위한 용도로 사용되는데요. 한 번 알아두면 자바 이외에 여러 곳에서도 두고두고 쓸 수 있어 매우 유용한데요, 핵심적인 정규 표현식의 사용 방법을 알아보겠습니다.

이해를 돕기 위해 정규 표현식이 어떻게 사용되는지 간단히 예를 들어보겠습니다. 데이터를 수집할 때 ‘a로 시작해서 n로 끝나는 단어’를 검색하고 싶다고 가정해 보겠습니다.

즉, 텍스트 문서 중에서 alien, auction, action 등의 단어 검색은 다음의 정규식으로 검색이 가능합니다.

a\w*n\s 식을 설명하면 아래와 같습니다.

java-정규-표현식
이렇게 특정 문자열의 형태를 나타내는 표현식을 문법으로 만들어 두었는데 이를 정규 표현식이라고 합니다. 이 표현식의 문법을 잘 알아두면, 문자열을 다루는데 능숙한 전문가가 될 수 있습니다.


 

자바 정규식(Regular Expression) 문법

그러면 본격적으로 자바에서의 정규식 사용법을 알아보겠습니다.

 

1. 패턴 그대로 매칭

가장 기본적인 사용법으로, 특정 단어를 검색하려면 간단하게 해당 문자를 그대로 사용하면 됩니다.

정규-표현식-예제

 

2. 숫자, 알파벳, 공백 등 특정 의미를 갖는 메타문자

일반적으로 전화번호나 주민번호같이 숫자만으로 구성된 패턴을 찾거나 또는 공백 같은 것을 찾기 위해 특별히 준비된 메타 문자 들이 있습니다.

자바-정규식

또한, 해당 메타 문자의 대문자 표현은 소문자 표현의 반대 의미를 가지고 있습니다.

자바-스크립트-정규식

 

 

3. 위치 지정자

자바-split-정규식

 

 

4. 반복 표시 수량 지정자

java-replace-정규식

또는 좀 더 세밀하게 몇 개가 나타나는지를 아래와 같이 지정도 가능합니다.

java-정규식

 

 

5. 여러 개 중 선택 패턴

 java-정규식-특수-문자-체크

 

 

6. 그룹

여러 글자를 그룹으로 묶어서 표현할 때는 ( ) 괄호로 묶어서 표현할 수 있습니다.

java-19

 

 

정규 표현식(Regular Expression) 사용 예시 

몇 가지 자주 쓰이는 패턴을 가지고 실용적인 예시를 들어보고자 합니다. 지금까지 자바 정규식 문법을 제대로 학습하셨다면 아래 작성된 문자열을 바로 이해하실 수 있을 것입니다. 

이해가 안되는 부분이 있다면, 다시 한번 정규식 문법을 찾아보면서 테스트해 보세요. 여러 번 복습해 보면 정규식 문법을 이해하는데 큰 도움이 되실 겁니다.

*  참고로 정규식 테스트는  https://regexr.com/ 사이트에서도 할 수 있습니다.

 

 * 한글 : 

[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]*
 

 * 주민등록번호 :  

^\d{6}-(1|2|3|4)\d{6}$

 

 * IP :
 (1) 숫자 3개씩 표현

^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

 

(2) 좀 더 정교하게 숫자의 범위까지 지정해서 표현

   ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

 

* 그림 파일명:

 ^\S+\.(?i)(png|jpg|bmp|gif)$

 

* 비밀번호:

^[a-zA-Z0-9~!@#$%\^&\*\(\)]{8,16}

 

 * e-mail표기형태 문자열 :  

^([a-z0-9A-Z_\.-]+)@([a-z0-9A-Z_\.-]+)\.([a-zA-Z\.]{2,6})$

 

 * URL표기형태 : 

 ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$

 

 * HTML 태그 형태 : 

 ^<([a-z]+)([^<]+)*(>(.*)<\/\1>|\s*\/>)$ 

( \1 첫 번째 (괄호)로 묶인 그룹,  \2는 두 번째 괄호로 묶인 그룹을 표현합니다. )
  

이랜서-회원가입
 

 

자바에서 정규 표현식 사용 방법

java-string

Java에서 정규식을 사용하기 위해서는 String 클래스에서 제공하는 메서드를 이용해서 간단히 사용할 수 있고, 또한 Pattern 클래스Matcher 클래스 2개의 클래스를 사용해서 정규식을 사용할 수도 있습니다.

Java에서 정규식을 사용할 때, 앞서 언급한 메타문자인 \s, \d, \w, \S, \D, \W와 같이 역슬래쉬(\)를 사용할 때는 패턴 사용 시 역슬래쉬(\)를 1번더 사용하여 총 2개(\\)를 써주어야 합니다. 

Java에서 사용하는 정규식 패턴은 “”(인용부호) 안에 입력해야 하는데, 이때 역슬래쉬를 하나만 쓰면 Escape 문자로 인식되기 때문에 특수문자인 역슬래쉬를 Escape 문자로 인식하지 않고, 역슬래쉬 문자 그대로의 의미로 사용하려면 역슬래쉬 두 개를 써야 합니다. 

앞의 역슬래쉬는 Escape 문자이고, 뒤의 역슬래쉬가 특수문자 그대로의 역슬래쉬를 의미합니다. 즉, \\s, \\d, \\w, \\S, \\D, \\W 와 같은 형태로 사용하여야 합니다.’

 

 

String 클래스에서 정규식 사용법

우선 가장 기본이 되는 String 클래스에서 제공하는 메서드로 사용해 보겠습니다.

int-to-string-java

아래 예시는 matches()를 사용해서 매칭 여부를 판단하는 간단한 예시입니다.

 

public class MatchesExample {

    public static void main(String[] args) {

        String input = "12345";

        String regex = "\\d+"; // 정규 표현식: 하나 이상의 숫자

        boolean matches = input.matches(regex);

        System.out.println("Does the input match the regex? " + matches);

    }

}

replaceAll() 메서드는 문자열에서 정규 표현식에 일치하는 모든 부분을 특정 문자열로 대체하는 데 사용됩니다

아래 예시는 “Hello World” 에서 공백을 제거하고 “Hello World”로 변환합니다. 

public class ReplaceAllExample {

    public static void main(String[] args) {

        String input = "Hello World";

        String regex = "\\s"; // 정규 표현식: 공백 문자

        String replacement = ""; // 빈 문자열로 대체

 

        String result = input.replaceAll(regex, replacement);

        System.out.println("Result: " + result);

    }

}

위의 예시는 String 클래스의 replaceAll() 메서드를 사용하여, 공백이 있는 패턴을 찾아서 공백을 없애는 예시를 보여주었습니다. 별다른 클래스나 메서드를 복잡하게  사용하지 않아도 String 클래스 자체에서 제공하는 메서드와 정규식을 이용해서 손쉽게 변환할 수 있습니다.

 

 

Java 패턴 매칭 메서드의 활용(Pattern/Matcher 클래스)

정규식을 본격적으로 이용하기 위해서 Java의 패턴 매칭 메서드를 이용해야 합니다.  Java에서 정규식을 이용하여 패턴 일치 여부뿐만 아니라 일치하는 패턴을 추출해오기 위해서는 Java.util.regex패캐지에서 제공하는 Pattern/Matcher 클래스를 사용해야 합니다.

 

1. Pattern 클래스

기본적으로 Pattern 클래스는 정규식 패턴을 정의하는 데 사용되고, 또한 Matcher 클래스를 객체를 생성하기 위해 사용됩니다.

java-17

 

2. Matcher 클래스

Matcher로 패턴과 일치하는 부분을 검색하거나 일치 여부를 판별할 수 있습니다.

java-split
 

사용방법은 다음과 같은 순서로 사용합니다.

 

1단계)  Pattern 생성 : Pattern p = Pattern.compile(“정규식”);

2 단계)  Matcher 생성 : Matcher m = p.macher(“정규식을 가지고 찾아볼 원본 문자열”);

3단계)  정규식으로 문자열을 반복해서 검색 : while( m.find() )

4단계)  문자열을 찾으면 찾은 텍스트 위치는 m.start()에 담겨 있고, m.group()에는 찾은 문자열이  담겨있습니다.

 

“My Java Application Java Program” \이라는 문자열에서 Java라는 단어가 몇 번째 있는지 모두 찾고, Java를 전부 Test로 바꾸는 예시입니다.

import Java.util.regex.Matcher;

import Java.util.regex.Pattern;

 

public class RegExpTest5 {

 

    public static void main(String[] args) {

            Pattern p = Pattern.compile("Java");

            Matcher m = p.matcher("My Java Application Java Program");

           

            while( m.find() ){

                    System.out.println("Java 발견위치: " + m.start());

            }

           

            String str1 = m.replaceAll("Test");

            System.out.println(str1);

    }

}

 

실행 결과는 다음과 같습니다.

 

Java 발견위치: 3

Java 발견위치: 20

My Test Application Test Program

간단히 패턴을 찾고, 또 문자열 치환을 하였습니다.
   

다음 예시는 날짜를 매칭하고, 연도/월/일을 찾아서 프린트하는 예시입니다.

import Java.util.regex.Matcher;

import Java.util.regex.Pattern;

 

public class MatcherGroupExample {

    public static void main(String[] args) {

        String input = "Today's date is 2024-05-15.";

        String regex = "(\\d{4})-(\\d{2})-(\\d{2})"; // 날짜를 매칭 정규식

 

        Pattern pattern = Pattern.compile(regex);

        Matcher matcher = pattern.matcher(input);

 

        if (matcher.find()) {

            System.out.println("Full date: " + matcher.group(0)); //전체날짜

            System.out.println("Year: " + matcher.group(1)); // 연도

            System.out.println("Month: " + matcher.group(2)); //

            System.out.println("Day: " + matcher.group(3)); //

        }

    }

}

group(0)은 전체 날짜를, group(1)은 연도를, group(2)은 월을, group(3)은 일을 반환합니다

 

 

정규 표현식; 자바 정규식을 활용해서  

문자열을 손쉽게 처리하는 방법, 잘 보셨나요?

java-18

정규식을 한번 배워두면 여러 가지 장점이 있습니다. 문자열을 처리할 때, 정규 표현식은 Java뿐만 아니라 Python, JavaScript, C 언어, PHP거의 모든 프로그래밍 언어에서 지원합니다. 

그리고, 개발자들이 사용하는 에디터나 통합 개발 환경(IDE)에서도 정규 표현식을 활용할 수 있습니다. vi 에디터나  VS code 등 많이 사용되는 에디터 대부분이 정규 표현식 패턴을 이용한 문자열 검색과 치환을 지원합니다.

또한 정규식을 알면 쉽게 특정 위치를 쉽게 찾아 변경할 수 있어 개발 생산성을 높일 수 있습니다. 따라서 정규 표현식은 한 번 배워두면, 어떤 개발 언어를 사용하더라도 문자열 처리를 쉽고 간편하게 할 수 있습니다.

문자열 처리가 어렵거나 자신이 없다면, 이랜서에서 알려드리는 정규 표현식 학습 자료를 적극 활용하세요. 개발 시간은 줄어들고, 커리어는 높아지는 마법을 경험할 수 있을 겁니다!

 

 

개발 시간은 줄어들고 커리어는 높아지는 마법

대한민국 No.1 IT 인재 매칭 플랫폼 이랜서를 활용해 보세요!

 

java-enum

개발 커리어가 높아지는 개발 프로젝트를 찾으시나요? 이랜서에 회원 가입하고 경력 기술서이력서를 작성해 보세요. 24년의 데이터를 활용해 커리어에 딱 맞는 맞춤형 개발 프로젝트를 매칭해 드립니다.


 

이랜서만의 ‘검증된’ 프로젝트 매칭 서비스

아직도 프로젝트 기다리느라 시간낭비 하시나요?

 

이랜서는 데이터가 맞춤형 프로젝트를 

‘스스로’ 찾아서 매칭해 드립니다!

 

프로젝트 기다리느라 지겨우셨죠? 아무리 경력 기술서이력서를 잘 작성해서 지원해도 연락 없는 IT 프로젝트. 체계도 없고 확인도 안되고, 합격할지도 모르는데 마냥 기다리고 있어야만 하나요? 그럴 때는 이랜서를 사용해 보세요!




 

 매칭 전문가를 통한 1:1 맞춤 상담부터

억 단위 데이터를 활용한 맞춤형 프로젝트 매칭까지

 

24년의 데이터가 맞춤형 프로젝트를 찾아드립니다.

 

이랜서데이터를 활용해 맞춤형  프로젝트를 매칭하는 IT 전문 인재 매칭 플랫폼입니다.  약 1.5억개의 사용자 데이터350만 개의 프리랜서 평가 데이터를 활용하여, 개발자에게 가장 적합한 프로젝트를 매칭해 드립니다.


 

데이터가 알아서 추천하는 맞춤형 프로젝트

나보다 나를 더 잘아는 맞춤형 프로젝트 매칭

java-map커리어를 높일 개발 프로젝트를 찾으신다면, 이랜서를 활용해 보세요. 경력 기술서이력서만 업데이트하면 이랜서의 데이터가 맞춤형 프로젝트를 찾아서 매칭해 드립니다. 이랜서와 함께 프로젝트 매칭 받고 개발 커리어를 높이세요!

 

대한민국의 프리랜서와 직장인의 

삶과 일의 Balance가 올라가는 그날까지!

 

대한민국 No.1 IT 인재 매칭 플랫폼 이랜서는 IT 프리랜서 및 모든 직장인 분들이 삶과 일에서 균형을 맞추고 커리어를 향상시키는 데 도움이 되는 Balance Up! 된 정보를 제공합니다.

 

▶️ 이랜서에서 추천하는 개발자 커리어 UP! 시리즈

1.  개발자 도구, 현직 개발자가 웹 개발 생산성을 높이는 방법

2. 기술 블로그, 성공하고 싶은 개발자라면 이렇게 쓰세요

3.  개발자 커뮤니티& 개발자 강의 Best 4, 커리어 성장을 원하는 개발자라면 꼭 확인하세요!

 

▶️이랜서에서 추천하는 개발자 업무 단축 시리즈

1.  프롬프트 작성법, Chat GPT 제대로 활용하는 방법

2.  Spring Framework, 개발 시간을 단축하고 싶으면 ‘3가지’를 확인하세요.

3.  깃 허브 사용법, 현직 개발자가 깃과 깃허브 사용법을 알려드립니다.

 

댓글0
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
실시간 인기 게시물
이랜서 PICK 추천 게시물