ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규표현식 - 1
    JAVA/정규표현식 2023. 5. 1. 11:16
    728x90

    1. 정규표현식이란?

    문자열의 특정 규칙 / 패턴 등을 표현한 언어이다.

    주로 문자열 치환, 검색 등의 동작을 할 때, 단순히 문자열들을 1 대 1 비교하는 것이 아니라,

    하나의 정규표현식 문자열이

          >>>>            특정 패턴(ex 주민등록번호/ url / email ...)을 비교할 수 있다.


    2. 자바의 정규표현식

    정규표현식을 완성하기 위해서는 3가지 준비가 필요하다

    1. 정규표현식
    2. 비교하고자하는 입력 문자열
    3. 자바에서 제공하는 2개의 클래스

    자바는 java.util.regex 에서 관련 클래스를 제공한다.

    • Pattern
    • Matcher
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		System.out.println("정규표현식 regular expression");
    
    		String input;  // 입력 문자열
    		String regex;  // 정규표현식
    		Pattern pat;
    		Matcher matcher;

     

    위와 같이 준비를 하고 나서 간단한 정규표현식으로 흐름을 파악해보자

     

    1. 정규표현식 입력 후  Pattern 클래스의 compile 메소드를 통해 정규표현식을 패턴으로 등록한다

            여기서 pat 변수는 Pattern 객체가 된다.

    regex = "My....";               // My가 들어가고 임의의 4개의 문자를 표현
    pat = Pattern.compile(regex);  // 정규표현식 등록

    2. 내가 비교하고 싶은 문자열을 생성

            간단한 입력문자열로 비교해보자

    input = "-My-1234-";

    3. 다음은 정규표현식의 패턴을 담고 있는 Pattern 객체 pat의  matcher 메소드를 사용해서

    내가 등록한 패턴이 매칭되는지를 확인합니다.

            matcher 메소드의 리턴은 Matcher 객체입니다

    matcher = pat.matcher(input);	//Matcher 객체 리턴

     

    여기서 잠깐 짚고 넘어가자.

    pat 변수 (Pattern 객체)는 compile 메소드를 통해 정규표현식(regex)에 대한 정보를 가지고 있고,

    matcher 메소드를 통해 입력문자열(input)에 대한 결과도 가지고 있으며,  matcher() 메소드를 통해 만들어진 Matcher 객체인 matcher 변수도 정규표현식과 입력문자열에 대한 정보 모두를 가지고 있게 된다.

     

     

     

    4. 다음은 Matcher 객체가 제공하는 메소드로 패턴매칭의 결과(검색, 치환)를 확인하는 작업이다

    // Matcher 객체로부터 패턴매칭을 수행하여  검색, 치환등의 동작
    		//  find() '다음' 패턴매칭 검색 , 패턴매칭 발견하면 true 아니면 false 리턴
    		//  group() 바로 직전에 패턴매칭된 문자열 String 리턴
    		//  reset() 다시 처음부터 패턴매칭하도록 reset 함.
    		//  replaceFirst() : 첫번째 매칭을 치환
    		//  replaceAll() : 모든 매칭을 치환
    		//  matches() : 패턴매칭이 '문자열 전체영역' 이 패턴매칭 되는지 여부
    		//  start() : 최근 매칭의 시작 index,
    		//  end() : 최근 매칭의 끝 index (마지막 매칭된 문자 '다음' 인덱스값)

     

    matcher.find() 메소드를 여러번 수행할 경우, 이전에 매칭을 하고 난 이후의 것을 찾게 된다. 
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class RegExp01Main {
    
    	public static void main(String[] args) {
    		System.out.println("정규표현식 regular expression");
    
    		String input;  // 입력 문자열
    		String regex;  // 정규표현식
    		Pattern pat;
    		Matcher matcher;
    
    		regex = "My...."; // My로 시작하고 임의의 문자 4개
    		pat = Pattern.compile(regex);
    		input = "-My-1234-";
    
    		matcher = pat.matcher(input); // Matcher 객체 리턴
    
    
    		if(matcher.find()){
    			System.out.println(matcher.group()+ "{" + matcher.start() + " ~ " + matcher.end() + "}");
    		} else{
    			System.out.println("find() 매칭 실패");
    		}
    
    		// 위를 다시 실행하면?, 다음 패턴매칭을 시도한다 --> 결과는 실패!
    		// find() 를 계속 호출하면 위에서 매칭한 이후부터 매칭을 시도한다
    		if(matcher.find()){
    			System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
    		} else {
    			System.out.println("find() 매칭 실패");
    		}
        }    
     }
    결과
    
    정규표현식 regular expression
    My-123{1 ~ 7}
    find() 매칭 실패

     

    다음은 정규표현식의 group() 에 대해서 알아보자

    'JAVA > 정규표현식' 카테고리의 다른 글

    정규표현식 - 3  (0) 2023.05.01
    정규표현식 - 2  (0) 2023.05.01
Designed by Tistory.