-
정규표현식 - 2JAVA/정규표현식 2023. 5. 1. 17:24728x90
정규표현식에 대한 전반적인 흐름은 "정규표현식 - 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}
다음은 실제로 정규표현식에 사용하는 각종 표현식들을 알아보자.