PHP 정규 캡 처 그룹 과 비 캡 처 그룹 에 대한 간단 한 설명
포획 조 란 무엇 인가
우선 PHP 의 정규 일치 함 수 를 살 펴 보 겠 습 니 다.
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
앞의 두 항목 은 우리 가 자주 사용 하 는 것 입 니 다.$pattern 은 정규 일치 모드 이 고$string 은 일치 하 는 문자열 입 니 다.array &$match,이것 은 배열 입 니 다.&일치 하 는 결 과 를 표시 하면$match 에 기 록 됩 니 다.
int $flags 이 표 시 를 전달 하면, 모든 일치 하 는 문자열 을 되 돌 릴 때 문자열 의 오프셋(대상 문자열 에 비해)을 추가 합 니 다.
int $offset 대상 문자열 의 알 수 없 는 것 부터 검색 할 것 을 지정 합 니 다(단 위 는 바이트 입 니 다).
우 리 는 주로$match 의 값 에 무엇이 있 는 지 봅 시다.
$mode = '/a=(\d+)b=(\d+)c=(\d+)/';
$str='**a=4b=98c=56**';
$res=preg_match($mode,$str,$match);
var_dump($match);
결 과 는 다음 과 같다.
array (size=4)
=> string 'a=4b=98c=56' (length=11)
=> string '4' (length=1)
=> string '98' (length=2)
=> string '56' (length=2)
이제 우 리 는 캡 처 그룹 이 무엇 인지 알 게 되 었 습 니 다.캡 처 그룹 은 정규 표현 에서()로 묶 인 부분 이 고 모든 쌍()은 캡 처 그룹 입 니 다.PHP 는 1 부터 번 호 를 매 깁 니 다.왜 1 부터 시 작 했 는 지 에 대해 서 는 PHP 가 일치 하 는 전체 문자열 번 호 를 0 으로 표시 하기 때 문 입 니 다.
괄호 나 괄호 가 여러 개 있 으 면 왼쪽 괄호 가 나타 나 는 순서에 따라 번 호 를 매 깁 니 다.그림:
그림 의 일치 패턴 에 따라 일치 할 때 포획 그룹의 123 번 호 는 각각 빨간색 과 파란색 입 니 다.
캡 처 그룹의 무시 와 이름
일치 하 는 그룹의 번호 로 PHP 를 막 을 수 있 습 니 다.일치 하 는 그룹 에 모드 를 추가 하기 전에 ?:
$mode = '/a=(\d+)b=(?:\d+)c=(\d+)/';
이렇게 하면 일치 하 는 결 과 는:
array (size=3)
=> string 'a=4b=98c=56' (length=11)
=> string '4' (length=1)
=> string '56' (length=2)
물론 괄호 내부 에서 도 독특한 이름 을 줄 수 있다.하위 그룹 이름 을 받 아들 일 수 있 습 니 다(?
예 를 들 어$mode='/a=(\d+)b=(?P
사용 시 결 과 는:
array (size=5)
=> string 'a=4b=98c=56' (length=11)
=> string '4' (length=1)
'sec' => string '98' (length=2)
=> string '98' (length=2)
=> string '56' (length=2)
색인 배열 을 유지 하 는 동시에 관련 항목 을 추가 합 니 다.key 값 은 캡 처 그룹 이름 입 니 다.캡 처 그룹의 역방향 참조
우 리 는 pregreplace()함수 가 정규 교 체 를 진행 할 때,우 리 는 또 사용 할 수 있다 혹시 $n n 번 째 포획 조 를 참조 합 니 다.
$mode = '/a=(\d+)b=(\d+)c=(\d+)/';
$str='**a=4b=98c=56**';
$rp='\1/$2/\3/';
echo preg_replace($mode,$rp,$str);//**4/98/56/**
\\1 은 포획 조 1(4),$2 는 포획 조 2(98),\3 은 포획 조 3(56)을 나타 낸다.비 포획 그룹의 용법:
왜 비 포획 조 라 고 부 릅 니까?그것 은 캡 처 그룹의 특성 이 있 기 때 문 입 니 다.일치 하 는 패턴()에 있 지만 일치 할 때 PHP 는 그룹 을 만 들 지 않 습 니 다.일치 하 는 결과 에 만 영향 을 주 고 결과 로 출력 되 지 않 습 니 다.
/d(?=xxx) "뒤쪽 은 xxx 의 숫자 입 니 다"와 일치 합 니 다.
주의 형식:일치 하 는 패턴 문자열 뒤에 만 놓 을 수 있 습 니 다!
예 를 들 면:
$pattern='/\d(?=abc)/';
$str="ab36abc8eg";
$res=preg_match($pattern,$str,$match);
var_dump($match);//6
일치 하 는 6 은 숫자 로 만 있 고 뒤에 abc 가 있 기 때 문 입 니 다.(?<=xxx) /d "앞 은 xxx 의 숫자 입 니 다"와 일치 합 니 다.
주의 형식:일치 하 는 패턴 문자열 앞 에 만 놓 을 수 있 습 니 다!
예 를 들 면:
$pattern='/(?<=abc)\d/';
$str="ab36abc8eg";
$res=preg_match($pattern,$str,$match);
var_dump($match);//8
일치 하 는 8 은 숫자 로 만 있 고 뒤에 abc 가 있 기 때 문 입 니 다.와(?=xxx) (?<=xxx)상대 적 으로(?!=xxx) (?이것 은 앞/뒤 가 xxx 문자열 이 아니 라 는 것 을 나타 내 는데 여 기 는 더 이상 예 를 들 지 않 습 니 다.
PHP 정규 에 나 오 는 캡 처 팀 과 비 캡 처 팀 은 모두 에 게 공 유 된 내용 입 니 다.참고 해 주시 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.