ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규표현식 - 2
    JAVA/정규표현식 2023. 5. 1. 17:24
    728x90

    정규표현식에 대한 전반적인 흐름은 "정규표현식 - 1"에서 보고 넘어 왔다.

     

    정규표현식을 만드는 다양한 규칙들이 존재하지만, 그전에 group이라는 것에 대해서 짚고 넘어가자

     

    1.  정규표현식 : group

    정규표현식에 () 을 사용하여 패턴 내에서 '그룹'을 지정하면 매칭된 정규표현식내에 그룹을 만들어 보여줄 수 있다.

    String input;
    String regex;
    Pattern pat;
    Matcher matcher;
    
    // 정규표현식 
    regex = "(My)(....)";  // 정규표현식에 () 사용
    
    // Pattern 객체에 등록 
    pat = Pattern.compile(regex);
    
    // 입력 문자열
    input = "-My98KK-myABCD--My1234567--MyZZ---My789";
    
    // pat 인스턴스 메소드 matcher()로 Matcher 객체 생성
    matcher = pat.matcher(input);

     

    여기까지만 보면, regex 변수에 소괄호() 를 2개 사용한 것 말고는 이전과 다른 게 없다.

     

    matcher.group(0) 은 전체 매칭된 결과를 보여주며,
    matcher.group(1)은 regex 변수에 (My)에 해당하는 값을,
    matcher.group(2)는 regex 변수에 (. . . .)에 해당하는 값을 보여준다.

    동일한 흐름대로,
    matcher.start() 와 matcher.end() 도
    매개변수를 0 입력 시 > 전체 매칭결과의 인덱스 시작과 끝을,
    매개변수 1 입력 시 > 첫번째 소괄호 그룹의 인덱스 시작과 끝을,
    매개변수 2 입력 시 > 두번째 소괄호 그룹의 인덱스 시작과 끝을 보여준다.

    *matcher.groupCount() > group 갯수 리턴

     

    System.out.println("groupCount(): " + matcher.groupCount());  // 정규표현식내 그룹의 개수
    System.out.println("입력문자열: " + input);
    
    while(matcher.find()) {
        System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
    
        // 그룹들 출력해보기
        // group(int group), start(int group), end(int group)
        System.out.println("\t group(0)" + matcher.group(0) + " {" + matcher.start(0) + "~" + matcher.end(0) + "}");
        System.out.println("\t group(1)" + matcher.group(1) + " {" + matcher.start(1) + "~" + matcher.end(1) + "}");
        System.out.println("\t group(2)" + matcher.group(2) + " {" + matcher.start(2) + "~" + matcher.end(2) + "}");
    
    } // end while
    결과
    
    groupCount(): 2
    입력문자열: -My98KK-myABCD--My1234567--MyZZ---My789
    My98KK {1~7}
    	 group(0)My98KK {1~7}
    	 group(1)My {1~3}
    	 group(2)98KK {3~7}
    My1234 {16~22}
    	 group(0)My1234 {16~22}
    	 group(1)My {16~18}
    	 group(2)1234 {18~22}
    MyZZ-- {27~33}
    	 group(0)MyZZ-- {27~33}
    	 group(1)My {27~29}
    	 group(2)ZZ-- {29~33}

     

    다음은 실제로 정규표현식에 사용하는 각종 표현식들을 알아보자.

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

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