>Java >java지도 시간 >Java 정규식에서 명명된 캡처링 그룹을 어떻게 사용합니까?

Java 정규식에서 명명된 캡처링 그룹을 어떻게 사용합니까?

DDD
DDD원래의
2024-11-05 16:43:02767검색

How do I use named capturing groups in Java regular expressions?

Java의 일반 명명된 그룹

배경 소개

Java의 java.regex 패키지는 명명된 그룹을 지원하지 않으므로 이 기사에서는 타사를 소개합니다. 이 문제를 해결하려면 라이브러리를 사용하세요.

이름이 지정된 그룹을 지원하는 타사 라이브러리

Java 7

Java 7부터 Java는 기본적으로 이름이 지정된 그룹을 지원합니다. 다음 구조를 사용할 수 있습니다.

  • (?capturing text): "name"이라는 명명된 그룹을 정의합니다.
  • k: 명명된 그룹을 나타냅니다. " name"의 명명된 그룹
  • ${name}: Matcher의 대체 문자열에서 캡처된 그룹을 참조
  • Matcher.group(String name): 지정된 "named group"에 의해 반환 캡처됨 입력 하위 시퀀스.
    자세한 내용은 오라클 블로그를 참고해주세요.

Java 7 이전 대안

Java 7 이전 버전의 경우 다음 타사 라이브러리가 명명된 그룹 지원을 제공합니다.

  • Google Named-regex: 완벽하게 지원되지만 해결해야 할 버그가 있을 수 있습니다.
  • jregex: ASCII 식별자에 대해서만 제한적으로 지원됩니다.

이름이 지정된 그룹 예

다음은 이름이 지정된 그룹을 사용하는 예입니다.

문자열:

"TEST 123"

정규 표현식:

"(?<login>\w+) (?<id>\d+)"

액세스:

matcher.group(1) == "TEST"
matcher.group("login") == "TEST"
matcher.name(1) == "login"

대체:

matcher.replaceAll("aaaaa__sssss_____") == "aaaaa_TEST_sssss_123____"
matcher.replaceAll("aaaaa_${login}_sssss_${id}____") == "aaaaa_TEST_sssss_123____"

제한 사항 및 참고 사항

  • Java 7에서는 여전히 명명된 그룹에 대한 지원이 제한되어 있습니다(자세한 내용은 tchrist의 답변 참조).
  • 일부 라이브러리의 명명된 그룹은 정규식 재귀에서 작동하지 않을 수 있습니다.
  • 정규 표현식에 대해 명명된 그룹을 지정할 때 명명 규칙을 엄격하게 준수해야 합니다(예: ASCII 식별자만).

위 내용은 Java 정규식에서 명명된 캡처링 그룹을 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.