Capturas (Capturing Groups) na substituição com expressões regulares no PHP
Ao trabalhar com a função preg_replace,
se capturarmos algo em um grupo na expressão regular,
então na string de substituição podemos inserir o conteúdo
desse grupo escrevendo o cifrão $ e o número
do grupo. Por exemplo, $0 - o grupo zero (a correspondência completa),
$1 - o primeiro grupo, $2 - o segundo
grupo e assim por diante.
Vamos ver para que isso serve e como usar com exemplos.
Exemplo
Vamos encontrar todos os números e, em vez deles, inserir esses mesmos números, mas entre chaves. Para isso, todos os números encontrados serão substituídos por eles mesmos, mas entre chaves:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'{1} {23} {456} xax'
Exemplo
Vamos encontrar todas as strings que representam
números com 'x' ao redor e substituir esses
números por eles mesmos, mas com '!' ao redor:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'!1! !23! !456! xax'
Exemplo
Vamos resolver o seguinte problema: dadas strings
no formato 'aaa@bbb' - letras, depois o símbolo @,
depois letras. Precisamos trocar de lugar as letras
antes do '@' e depois. Vamos implementar:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'bbb@aaa ddd@ccc'
Tarefas Práticas
Dada a string:
<?php
$str = '12 34 56 78';
?>
Troque os dígitos de lugar em todos os números de dois dígitos.
Dada a string com uma data:
<?php
$str = '31.12.2025';
?>
Converta esta data para '2025.12.31'.