[regex] 순환 으로 경화 그룹 을 실현 합 니 다.
먼저 이 박문 의 '몇 째' 를 보면
의 개념 을 알 아야 한다.하지만 독자 들 이 둘 러 볼 수도 있다.그 러 니까 필요 한 개념 을 말 해 봐.NFA 의 영혼 은 거 슬러 올 라 가 는 것 이 고
NFA 특유 의 것 이 며
의 임 무 는 앞의 예비 상 태 를 버 리 는 것 이다.그럼 고 화 분조 의 작용 은 무엇 입 니까?당신 이 이런 요 구 를 가지 고 있 는 지 생각해 보 세 요. 만약 당신 이 이런 정규 를 썼 다 면.
[0-3]?\d
"
" 문자열 과 일치 합 니 다.의심 할 여지없이
3
는 3
에 매 칭 되 었 을 것 이다. \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
매 칭 되 었 습 니 다!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.