정규식 치환에서의 캡처 그룹 사용하기 in PHP
preg_replace 함수를 사용할 때,
정규식에서 무엇인가를 캡처 그룹에 넣으면,
치환 문자열에서 달러 기호 $와 캡처 그룹 번호를 써서
해당 캡처 그룹의 내용을 삽입할 수 있습니다.
예를 들어, $0 - 제로 캡처 그룹,
$1 - 첫 번째 캡처 그룹, $2 - 두 번째
캡처 그룹 등입니다.
이것이 왜 필요한지, 어떻게 사용하는지 예제를 통해 살펴보겠습니다.
예제
모든 숫자를 찾아서, 그 숫자를 중괄호로 감싼 형태로 바꿔보겠습니다. 이를 위해 찾은 모든 숫자를 중괄호로 감싼 자기 자신으로 치환합니다:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
결과 변수에는 다음이 저장됩니다:
'{1} {23} {456} xax'
예제
x로 둘러싸인 모든 숫자 문자열을 찾아서
그 숫자를 '!' 기호로 둘러싼 형태로
바꿔보겠습니다:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
결과 변수에는 다음이 저장됩니다:
'!1! !23! !456! xax'
예제
다음 문제를 풀어봅시다: 'aaa@bbb' 형태의 문자열이 있습니다
- 글자, 그 다음 @ 기호, 그 다음 글자.
@ 앞의 글자와 뒤의 글자를 서로 바꿔야 합니다.
구현해 보겠습니다:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
결과 변수에는 다음이 저장됩니다:
'bbb@aaa ddd@ccc'
실습 문제
문자열이 주어집니다:
<?php
$str = '12 34 56 78';
?>
모든 두 자리 숫자에서 숫자 순서를 바꾸세요.
날짜 문자열이 주어집니다:
<?php
$str = '31.12.2025';
?>
이 날짜를 '2025.12.31' 형태로 변환하세요.