"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java 정규식에서 그룹 캡처는 어떻게 작동합니까?

Java 정규식에서 그룹 캡처는 어떻게 작동합니까?

2024년 11월 17일에 게시됨
검색:704

How do Capturing Groups Work in Java Regular Expressions?

Java Regex 캡처 그룹 이해

이 코드 조각에서는 Java의 정규식(regex) 라이브러리를 사용하여 문자열의 일부를 추출합니다. 정규식은 "(.)(\d )(.)"로 정의됩니다. 여기서:

  • (.*): 다음 그룹 앞의 모든 문자와 일치합니다. .
  • (\d ): 이전 그룹 뒤의 모든 자릿수와 일치합니다.
  • (.*): 이전 그룹 뒤의 모든 문자와 일치합니다.

정규식 실행

정규식이 "이 주문은 QT3000에 대해 이루어졌습니다! OK?"라는 문자열에 대해 실행되면 다음 결과가 생성됩니다.

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000

그리디 수량자 이해

정규식에 사용되는 기본 수량자는 탐욕적입니다. 즉, 다음 그룹을 만족시키기 위해 가능한 많은 문자와 일치합니다. 이 경우 ".*"는 첫 번째 숫자가 발견될 때까지 전체 문자열과 일치하며 세 번째 그룹에는 문자가 남지 않습니다.

Reluctant Quantifiers 사용

일치하려면 필요한 문자만 사용하려면 물음표로 표시되는 마지못해 한정자를 사용할 수 있습니다. "(.)"를 "(.?)"로 바꾸는 것은 가능한 최소 문자 수와 일치하므로 다음과 같이 출력됩니다.

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000

그룹 캡처의 장점

그룹 캡처를 사용하면 나중에 사용할 수 있도록 일치하는 문자열의 특정 부분을 추출할 수 있습니다. 이 예에서는 아래 코드 조각에서 볼 수 있듯이 "Matcher" 개체의 "group()" 메서드를 통해 각 그룹의 일치된 값에 액세스할 수 있습니다.

Pattern pattern = Pattern.compile("(.*?)(\\d )(.*)");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
    System.out.println("group 1: "   matcher.group(1));
    System.out.println("group 2: "   matcher.group(2));
    System.out.println("group 3: "   matcher.group(3));
}
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3