[regex] 순환 으로 경화 그룹 을 실현 합 니 다.

환 시 로 고 화 그룹 을 실현 하 다
먼저 이 박문 의 '몇 째' 를 보면 의 개념 을 알 아야 한다.하지만 독자 들 이 둘 러 볼 수도 있다.그 러 니까 필요 한 개념 을 말 해 봐.
NFA 의 영혼 은 거 슬러 올 라 가 는 것 이 고 NFA 특유 의 것 이 며 의 임 무 는 앞의 예비 상 태 를 버 리 는 것 이다.그럼 고 화 분조 의 작용 은 무엇 입 니까?
당신 이 이런 요 구 를 가지 고 있 는 지 생각해 보 세 요. 만약 당신 이 이런 정규 를 썼 다 면.
[0-3]?\d

" " 문자열 과 일치 합 니 다.
의심 할 여지없이 33 에 매 칭 되 었 을 것 이다. \d 매 칭 이 우선 이기 때문에 먼저 [0-3]? 에 매 칭 된 다음 에 [0-3]? 매 칭 되 지 못 한 다 는 것 을 발견 했다. 그래서 거 슬러 올 라 가면 통제 권 이 \d 로 옮 겨 진 다음 에 \d 에서 \d 로 매 칭 되 었 다. 그러나 우리 의 수 요 는 3 에 매 칭 되 는 것 이지 [0-3]? 에 게 매 칭 되 는 것 이 아니다.일치 시 키 면 경화 로 그룹 을 나 누 어 원래 의 정규 를 바 꿀 수 있 습 니 다.
(?>[0-3]?)\d

이때 \d[0-3]? 와 일치 할 수 있 습 니 다. 만약 당신 의 정규 엔진 이 경화 그룹 을 지원 하지 않 는 다 면 괜 찮 습 니 다. 이 박문 의 목적 은 환 시 를 통 해 경화 그룹 을 실현 하 는 것 입 니 다.
생각해 보면 사실 3 은 점유 양사 와 매우 비슷 하 다. 점유 양 어 는 , ++, ?+ 같은 것 을 말한다. 이런 양 어 는 일단 일치 하면 이미 저 장 된 문 자 를 내 놓 지 않 는 다. 다시 말 하면 이전에 저 장 된 예비 상 태 를 버린다.*+ 도 마찬가지 입 니 다. 일치 하 는 것 을 자신 에 게 남 겨 두 고 어떤 문자 도 내 놓 지 않 습 니 다.
자, 본론 으로 돌아 가서 우 리 는 어떻게 환 시 로 하나 를 실현 하 는 지, 환 시 와 관련 된 지식 을 기억 하 십 니까?둘 러 보기에 일치 하 는 문자 가 명확 하지 않 고 위치 가 일치 합 니 다!그럼 이렇게 하면 되 겠 네요. 예 를 들 어 우리 가 경화 시 키 고 싶 은 것 은 이 꼬치 이 고 선택 할 수 있 는 것 을 원 합 니 다.
우 리 는 먼저 이 하위 문자열 의 왼쪽 위 치 를 둘 러 보 았 다.
(?=3?)

아무런 문제 가 없 는 것 처럼 보이 지만, 사실 이때 3 는 이미 경화 되 었 다. 예비 상 태 를 저장 하지 않 았 기 때문이다. 그러나 이렇게 되면 문제 가 있다.
우 리 는 단지 일치 하 는 위치 일 뿐 이 므 로 다음 부터 일치 하 는 위 치 는 제자리 에 있 습 니 다. 우 리 는 아이디어 문자열 과 일치 하여 위 치 를 앞으로 이동 시 켜 야 합 니 다. 그래서 개선 한 후에
(?=(3?))\1

포획 조 포획 3 후 역방향 인용.
다음 에 새로운 예 를 보 겠 습 니 다. 지금 우 리 는 정규 표현 식 을 이렇게 씁 니 다.
(?=([0-4]?))\1\d

그리고 매 칭 3?, 하, 매 칭 에 실 패 했 습 니 다. 이것 이 바로 우리 가 원 하 는 결과 입 니 다. 3 3 매 칭 되 었 습 니 다!!

좋은 웹페이지 즐겨찾기