preg_match_all 함수
preg_match_all 함수는 문자열에서 패턴에 대한 전역 검색을 수행합니다. 첫 번째 매개변수에는 정규 표현식이, 두 번째 매개변수에는 검색 대상 문자열이, 세 번째 매개변수에는 결과를 저장할 배열이 전달됩니다. 네 번째 선택적 매개변수는 반환되는 구조의 유형을 결정하고, 다섯 번째 선택적 매개변수는 검색 시작 오프셋입니다.
구문
preg_match_all(pattern, subject, matches, [flags], [offset]);
플래그
네 번째 매개변수가 가질 수 있는 값들을 살펴보겠습니다:
| 매개변수 | 설명 |
|---|---|
PREG_PATTERN_ORDER |
기본 모드입니다. 결과는 캡처 그룹별로 그룹화됩니다 - 배열의 0번째 요소는 0번 캡처 그룹을 포함하고, 배열의 1번째 요소는 1번 캡처 그룹을 포함하는 식입니다. |
PREG_SET_ORDER |
결과는 일치 항목별로 그룹화됩니다 - 배열의 각 요소는 발견된 캡처 그룹을 담은 배열을 포함합니다. |
PREG_OFFSET_CAPTURE |
각 일치 항목에 대해 문자열 내 위치가 반환됩니다. 각 결과는 0번 요소가 일치 문자열을, 1번 요소가 그 오프셋을 담은 배열입니다. |
PREG_UNMATCHED_AS_NULL |
일치하지 않는 캡처 그룹은 빈 문자열 대신
null로 반환됩니다.
|
예제
문자열에서 모든 숫자를 찾아봅시다:
<?php
$str = 'abc 123 def 456';
preg_match_all('/\d+/', $str, $res);
var_dump($res[0]);
?>
코드 실행 결과:
['123', '456']
예제
문자열에서 모든 문자 'a'를 찾아봅시다:
<?php
$str = 'banana';
preg_match_all('/a/', $str, $res);
var_dump($res[0]);
?>
코드 실행 결과:
['a', 'a', 'a']
예제
문자열에서 모든 타임스탬프와 그 구성 요소를 추출해봅시다:
<?php
$time = '12:01:02 13:03:04 14:05:06';
preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res);
var_dump($res);
?>
코드 실행 결과:
[
0 => ['12:01:02', '13:03:04', '14:05:06'],
1 => ['12', '13', '14'],
2 => ['01', '03', '05'],
3 => ['02', '04', '06']
]
예제
이번에는 PREG_SET_ORDER 플래그를 사용하여
일치 항목별로 그룹화해봅시다:
<?php
$time = '12:01:02 13:03:04 14:05:06';
preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res, PREG_SET_ORDER);
var_dump($res);
?>
코드 실행 결과:
[
0 => '12:01:02',
1 => '12',
2 => '01',
3 => '02'
],
[
0 => '13:03:04',
1 => '13',
2 => '03',
3 => '04'
],
[
0 => '14:05:06',
1 => '14',
2 => '05',
3 => '06'
]
함께 보기
-
정규 표현식과의 첫 번째 일치 항목을 검색하는 함수
preg_match -
정규 표현식에 의한 검색 및 치환을 수행하는 함수
preg_replace