정규 표현 식,그룹,하위 일치(하위 모드),비 포획 하위 일치(하위 모드)

앞에서 우 리 는 정규 표현 식 에 일치 하 는 횟수(양사)를 나타 내 는 원 문자 가 많다 는 것 을 알 고 있 습 니 다.모두 앞 에 나타 난 단일 문자 의 횟수 를 반복 할 수 있 습 니 다.때때로,우 리 는 한 그룹의 여러 문자 가 함께 나타 나 는 횟수 와 일치 해 야 할 수도 있다.이때 우 리 는 조 를 나 누 어야 한다.이 문자 들 을 작은 괄호 로 묶 고 하위 표현 식 을 지정 하 는 것 입 니 다.그리고 이 하위 표현 식 의 중복 횟수 를 지정 할 수 있 습 니 다.하위 표현 식 에 대해 서도 다른 작업 을 할 수 있 습 니 다.이 럴 때 괄호 안에 있 는 문 자 를 하나의 전체 로 볼 수 있다.
그룹 모드 예시
예 를 들 어 문자열 을 찾 을 때 여러 개의 win 문자열 이 연속 으로 나타 납 니 다.이렇게 끝 낼 수 있어 요.

<?php 
$str = "this is win winwindows!";
preg_match_all("/(win)+/",$str,$marr);
var_dump($marr);

그룹 모드 를 사용 하지 않 고 여러 문자 와 일치 할 수 있 습 니까?우 리 는 이전에 조작 기 호 를 발 견 했 습 니 다:[win]+,비록 winwin 문자 와 일치 할 수 있 지만,이것 은 w,i,n 조합의 하나 또는 여러 문자 가 있 기 때문에 순 서 를 제한 하지 않 습 니 다.보 이 는 것 은 wwin,ww,inw 등 과 일치 합 니 다.이 세 글자 로 구 성 된 것 이 라면 여러 글자 가 일치 합 니 다.
위 에 어떻게 일치 합 니까?한 개 에 두 개의 결과 가 있 습 니까?이것 이 바로 하위 모드(하위 일치)입 니 다.기본적으로 여러 문 자 를 하나의 전체 로 조합 할 수 있 는 것 을 제외 하고 괄호,괄호 로 묶 은 이 표현 식 을 임시 버퍼 에 저장 하여 다음 정규 표현 식 을 호출 할 수 있 습 니 다.위의 이 예 에서 우 리 는 후기 에 호출 할 필요 가 없다.그래서 이 하위 표현 식 캡 처 내용 을 어떻게 차단 합 니까?"앞 에"?"됐다.다음 예 정규 표현 식 그룹 비 포획 모드 를 봅 시다.

비 포획 모드 의 장점 은 어떤 것 이 있 습 니까?위 에서 보면 포획 을 줄 일 수도 있 고 매 칭 횟수 를 줄 일 수도 있다.따라서 그룹 표현 식 에 비 포획 접 두 사 를 추가 할 필요 가 없습니다.메모리 비용 을 절약 할 수 있 고 일치 속 도 를 높 일 수 있 습 니 다!
방금 정규 표현 식 그룹 을 말 했 습 니 다.기본 적 인 상황 은 하위 표현 식 을 캡 처 하여 캐 시 영역 에 저장 합 니 다.후속 호출 을 위 하여.그럼 이 건 어떤 상황 인가요?사실 이것 은 정규 표현 식 의 인용 입 니 다.포 획 된 모든 하위 매 칭 은 정규 표현 식 모드 에서 왼쪽 에서 오른쪽으로 만 나 는 내용 에 따라 순서대로 저 장 됩 니 다.메모리 에 일치 하 는 버퍼 번 호 는 1 부터 최대 9 까지 저장 할 수 있 습 니 다.뒤에 있 는 표현 식 이 이 값 을 인용 할 수 있 도록 하고 나중에 인용 하 라 고 합 니 다.
다음 예 를 들 어 하나의 문자열 에서 서로 인접 하지 않 고 여러 번 시스템 단어 가 나 타 났 습 니 다:add.

<?php
$str = "add123456addasdf"; 
preg_match_all('/(add)\d+\1/',$str,$marr); 
var_dump($marr);

역방향 인용 은 특수 한 일치 상황 을 처리 하 는 데 자주 사용 된다.예 를 들 어 문자열 을 찾 을 때 중복 문자열 과 인접 하지 않 습 니 다.html 탭 의 내용 을 찾 습 니 다.특히 html 분석 은 매우 흔 합 니 다.접두사자주 사용 합 니 다.

<?php
$str = file_get_contents('http://blog.chacuo.net/');
preg_match_all('/<(\S+)[^>]*>[^<]*<\/\1>/',$str,$marr);
 
var_dump($marr);
 
// (\S+)              ,    html tag  
// tag      <tag      >   [^>]*   tag        
//    [^<]*    <tag...>    </tag>       , "<"  ,      [^<]*   
//    <\/\1> "\/"   "/"  ,   "\1"          (\S+)

이상 은 정규 표현 식 을 사용 하 는 것 이 중요 합 니 다.그룹,역방향 일치,그리고 비 캡 처 그룹 설명 과 인 스 턴 스 입 니 다.속성 변경 기능 을 원 하 는 친구 에 게 도움 이 되 었 으 면 합 니 다.동시에 여러분 의 교 류 를 환영 합 니 다!

좋은 웹페이지 즐겨찾기