Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

비 캡처 그룹 Java 정규식:


캡처 그룹을 사용하면 여러 문자를 단일 단위로 취급할 수 있습니다. 괄호 안에 그룹화할 문자를 배치하기만 하면 됩니다. 예를 들어 -

(.*)(\\d+)(.*)

여러 그룹을 일치시키려는 경우 각 그룹의 일치 결과가 캡처됩니다. group() 메소드에 각각의 그룹 번호를 전달하여 결과를 그룹으로 얻을 수 있습니다. 1,2,3 등.(오른쪽에서 왼쪽으로) 그룹 0은 전체 일치를 나타냅니다.

예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CapturingGroups {
   public static void main( String args[] ) {
      System.out.println("Enter input text");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      String regex = "(.*)(\\d+)(.*)";
      //Create a Pattern object
      Pattern pattern = Pattern.compile(regex);
      //Now create matcher object.
      Matcher matcher = pattern.matcher(input);
      if (matcher.find( )) {
         System.out.println("Found value: " + matcher.group(0) );
         System.out.println("Found value: " + matcher.group(1) );
         System.out.println("Found value: " + matcher.group(2) );
         System.out.println("Found value: " + matcher.group(3) );
      } else {
            System.out.println("NO MATCH");
      }
   }
}

출력

Enter input text
sample data with 1234 (digits) in middle
Found value: sample data with 1234 (digits) in middle
Found value: sample data with 123
Found value: 4
Found value: (digits) in middle

비 캡처 그룹

비 캡처 그룹은 캡처 그룹과 동일한 기능을 제공하지만 결과를 캡처하지는 않습니다.

예를 들어 그룹을 사용하여 텍스트의 URL이나 전화번호를 일치시켜야 하는 경우 원하는 하위 문자열의 시작 부분이 동일하므로 특정 그룹의 결과를 캡처할 필요가 없으며 이러한 경우 캡처하지 않는 그룹을 사용할 수 있습니다. 캡처하지 않는 그룹은 (?:로 시작하여 )로 끝납니다.

예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CapturingGroups {
   public static void main( String args[] ) {
      System.out.println("Enter input text");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      String regex = "(.*)(?:\\d+)(.*)";
      //Create a Pattern object
      Pattern pattern = Pattern.compile(regex);
      //Now create matcher object.
      Matcher matcher = pattern.matcher(input);
      if (matcher.find( )) {
         System.out.println("Found value: " + matcher.group(0) );
         System.out.println("Found value: " + matcher.group(1) );
         System.out.println("Found value: " + matcher.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

출력

Enter input text
sample data with 1234 (digits) in middle
Found value: sample data with 1234 (digits) in middle
Found value: sample data with 123
Found value: (digits) in middle

참고: 캡처하지 않은 그룹은 그룹 수에 포함되지 않습니다.