정규 표현 식 그룹 및 캡 처
그룹의 도입 은 단일 문 자 를 반복 하 는 것 에 대해 매우 간단 합 니 다. 문자 뒤에 상한 선 정 부 를 직접 팔 면 됩 니 다. 예 를 들 어 a + 는 1 개 이상 의 a, a 를 표시 합 니 다.0 개 또는 1 개 a 와 일치 하 는 것 을 나타 낸다.이러한 한정 부 호 는 다음 과 같다.
X ? X, 한 번 또는 한 번 도 X * X, 0 번 또는 여러 번 X + X 가 없습니다. 한 번 또는 여러 번 X {n} X, 마침 n 번 X {n,} X, 적어도 n 번 X {n, m} X, 적어도 n 번 은 되 지만 m 번 을 넘 지 않 습 니 다. 그런데 우리 가 여러 문 자 를 반복 하려 면 어떻게 해 야 합 니까?이 때 우 리 는 그룹 을 사용 해 야 합 니 다. 우 리 는 작은 괄호 () 를 사용 하여 중복 할 하위 표현 식 을 지정 한 다음 에 이 하위 표현 식 을 반복 할 수 있 습 니 다. 예 를 들 어 (abc)?0 개 또는 1 개의 abc 를 나타 내 는 괄호 표현 식 은 하나의 그룹 을 나타 낸다.그룹 을 나 누 면 캡 처 그룹 과 비 캡 처 그룹 으로 나 눌 수 있 습 니 다.
포획 조
포획 조 는 왼쪽 에서 오른쪽으로 괄호 를 계산 해서 번 호 를 매 길 수 있다.예 를 들 어 표현 식 (A) (B (C)) 에 네 개의 그룹 이 존재 합 니 다.
0 (A) (B (C)) 1 (A) 2 (B (C)) 3 (C) 조 0 은 항상 전체 표현 식 을 대표 합 니 다.
캡 처 그룹 이 라 고 명명 한 이 유 는 일치 하 는 그룹 과 일치 하 는 입력 시퀀스 의 모든 하위 시퀀스 를 저장 하기 때 문 입 니 다.캡 처 된 하위 시퀀스 는 나중에 Back 참조 (역방향 참조) 를 통 해 표현 식 에서 사용 할 수 있 으 며, 일치 하 는 작업 이 끝 난 후에 일치 하 는 기 에서 검색 할 수 있 습 니 다.
Back 인용 은 뒤의 표현 식 에서 우 리 는 그룹의 번 호 를 사용 하여 앞의 표현 식 이 포착 한 텍스트 서열 을 인용 할 수 있다 는 것 을 말한다.메모: 역방향 인용 은 정규 가 아 닌 앞의 캡 처 그룹 에 있 는 텍스트 를 참조 합 니 다. 즉, 역방향 인용 에 맞 는 텍스트 는 앞의 캡 처 그룹 에 있 는 텍스트 와 같 아야 한 다 는 점 이 중요 합 니 다.
【 例 】 (["]). * \ 1
그룹 을 사 용 했 습 니 다. \ \ 1 은 따옴표 라 는 그룹 에 대한 인용 입 니 다. 따옴표 두 개 나 작은 따옴표 에 포 함 된 모든 문자열 과 일치 합 니 다. 예 를 들 어 'abc' 또는 '또는' '또는' '' 와 일치 하지만 'a' 나 'a' 와 일치 하지 않 습 니 다. 이 유 는 표현 식 이 아 닌 텍스트 만 참조 하기 때 문 입 니 다.
캡 처 그룹 이 아 닌 (?) 으로 시작 하 는 그룹 은 순수한 비 캡 처 그룹 입 니 다. 텍스트 를 캡 처 하지 않 고 조합 계 에 대해 계산 하지 않 습 니 다. 작은 괄호 에서? 번호 로 시작 하면 이 그룹 은 텍스트 를 캡 처 하지 않 습 니 다. 물론 그룹의 번호 도 없 기 때문에 Back 참조 에 저장 되 지 않 습 니 다.
캡 처 그룹 을 통 해 일치 하 는 내용 을 얻 을 수 있 습 니 다. 그런데 왜 비 캡 처 그룹 이 있 습 니까? 캡 처 그룹 이 캡 처 한 내용 은 메모리 에 저장 되 어 있 기 때 문 입 니 다. 나중에 사용 할 수 있 습 니 다. 예 를 들 어 인 용 된 메모리 에 저 장 된 캡 처 그룹 이 아 닌 텍스트 를 캡 처 하지 않 고 일치 하 는 내용 을 따로 사용 하지 않 습 니 다.그룹 을 나 누 어 메모리 에 넣 습 니 다. 따라서 비 포획 그룹 을 사용 하 는 것 이 포획 그룹 을 사용 하 는 것 보다 메모 리 를 절약 합 니 다. 실제 상황 에서 우 리 는 고려 하여 선택해 야 합 니 다.
그룹 사용
정규 표현 식 을 그룹 으로 나 누 면 Matcher 대상 의 group 방법 으로 그룹 을 나 눈 후 일치 하 는 값 을 가 져 올 수 있 습 니 다.
코드 예제
package com.ysh.micro.client.controller;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestServiceUseController {
public static void main(String[] args) {
String s = " a11.77 ";
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?) ");
Matcher m = p.matcher(s);
//System.out.println(m.find());
System.out.println(m);
if(m.find()) {
System.out.println(m.group(1));
}
}
}
0 코드 는 전체 정규 표현 식 의 결 과 를 대표 합 니 다. 배열 아래 표 시 는 작은 그룹 마다 가 져 온 결 과 를 순서대로 가 져 옵 니 다.
방법 소개
find: 일치 하 는 group 을 찾 을 지 여부: 그룹 에 일치 하 는 값 을 가 져 옵 니 다 replaceAll: 일치 하 는 값 을 바 꿉 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.