정규 표현식 검색 시 캡처 그룹 활용하기 (PHP)
도메인을 포함하는 문자열이 있다고 가정해 봅시다:
<?php
$str = 'eee site.ru bbb';
?>
이 도메인을 찾아서 도메인 이름과 최상위 도메인(TLD)을 분리해 봅시다. 이를 위해 정규 표현식의 특수한 캡처 그룹을 사용할 수 있습니다.
캡처 그룹은 정규 표현식으로 찾은 부분을 저장할 수 있는 배열 요소입니다. 이 경우 첫 번째 캡처 그룹에 도메인 이름을, 두 번째 캡처 그룹에 최상위 도메인을 저장할 수 있습니다.
이제 이를 구현해 보겠습니다. 먼저 문자열에서 도메인을 찾는 정규 표현식을 작성합니다:
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
이제 정규 표현식에서 어떤 부분이 어떤 캡처 그룹에 들어갈지 지정해 보겠습니다. 이는 괄호를 사용하여 수행됩니다. 괄호를 사용하여 도메인 이름을 찾는 부분과 최상위 도메인을 찾는 부분을 구분해 보겠습니다:
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
이제 preg_match 함수의 세 번째 매개변수로
변수(임의의 이름)를 지정합니다:
<?php
preg_match($reg, $str, $res);
?>
지정된 변수에는 찾은 캡처 그룹들이 배열로 저장됩니다. 배열의 0번 요소에는 찾은 전체 문자열이, 1번 요소에는 첫 번째 캡처 그룹, 2번 요소에는 두 번째 캡처 그룹이 저장되는 식입니다:
<?php
preg_match($reg, $str, $res);
var_dump($res); // ['site.ru', 'site', 'ru'] 출력
?>
날짜가 포함된 문자열이 주어집니다:
<?php
$str = '2025-12-31';
?>
연도, 월, 일을 별도의 캡처 그룹에 저장하세요.
파일 이름이 포함된 문자열이 주어집니다:
<?php
$str = 'index.html';
?>
파일 이름과 확장자를 별도의 캡처 그룹에 저장하세요.