더 잘 이해하기 위해 세 가지 표현식과 캡처 링 그룹을 적용하고 각 동작을 분석해 보겠습니다.
()
캡처 링 그룹 -괄호 안의 정규식이 일치해야하며 일치하면 캡처 링 그룹이 생성됩니다.
(?:)
비 캡처 그룹 -괄호 안의 정규식이 일치해야하지만 캡처 그룹을 생성하지 않습니다.
(?=)
긍정적 인 전망 -정규식이 일치해야한다고 주장합니다.
(?!)
부정적인 전망 -정규식과 일치하는 것이 불가능하다고 주장합니다.
의 적용합시다 q(u)i
을 종료합니다 . q 와 q
일치 하고 캡처 그룹 은 u 와 일치 합니다. 캡처 그룹 내에서 일치하는 항목을 가져오고 캡처 그룹이 생성됩니다. 그래서 엔진은 . 그리고 i 와 일치 합니다. 이 마지막 경기 시도는 성공했습니다. qui 가 일치되고 u 와 함께 캡처 링 그룹 이 생성됩니다.u
i
i
의 적용합시다 q(?:u)i
을 종료합니다 . 다시, q 와 q
일치 하고 비 캡처 그룹 은 u 와 일치 합니다. 비 캡처 그룹의 일치 항목을 가져 오지만 캡처 그룹은 생성되지 않습니다. 그래서 엔진은 . 그리고 i 와 일치 합니다. 이 마지막 경기 시도는 성공했습니다. qui 가 일치합니다u
i
i
의 적용합시다 q(?=u)i
을 종료합니다 . 예견은 긍정적이고 다른 토큰이 뒤 따릅니다. 다시 말하지만, q
일치 Q 와 u
일치 U를 . 다시 말하지만, 미리보기의 일치 항목을 삭제해야하므로 엔진 i
은 문자열에서 u로 되돌아갑니다 . 예견이 성공 했으므로 엔진은 i
. 그러나 ui
와 일치 할 수 없습니다 . 그래서이 매치 시도는 실패합니다.
의 적용합시다 q(?=u)u
을 종료합니다 . 예견은 긍정적이고 다른 토큰이 뒤 따릅니다. 다시 말하지만, q
일치 Q 와 u
일치 U를 . 미리보기의 일치 항목을 삭제해야하므로 엔진 u
은 문자열에서 u로 되돌아갑니다 . 예견이 성공 했으므로 엔진은 u
. 그리고 uu
와 일치 합니다. 그래서이 매치 시도는 성공했습니다. qu 가 일치합니다.
의 적용합시다 q(?!i)u
을 종료합니다 . 이 경우에도 예견은 긍정적이고 ( i
일치하지 않기 때문에 ) 다른 토큰이 뒤 따릅니다. 다시 말하지만, q
일치하는 질문을 하고 i
일치하지 않는 유를 . 미리보기의 일치 항목을 삭제해야하므로 엔진 u
은 문자열에서 u로 되돌아갑니다 . 예견이 성공 했으므로 엔진은 u
. 그리고 uu
와 일치 합니다. 그래서이 매치 시도는 성공했습니다. qu 가 일치합니다.
결론적으로, 미리보기 그룹과 비 캡처 그룹의 실제 차이점은 존재를 테스트하거나 일치를 테스트하고 저장하려는 경우에 관한 것입니다. 캡처 그룹은 비용이 많이 들기 때문에 신중하게 사용하십시오.