Capturas em buscas com expressões regulares no PHP
Suponha que temos uma string contendo um domínio:
<?php
$str = 'eee site.ru bbb';
?>
Vamos encontrar este domínio e dividi-lo em partes: separar o nome do domínio de sua zona. Para isso, usaremos capturas especiais de expressões regulares.
As capturas representam elementos de um array, nos quais podemos colocar partes encontradas pela regex. No nosso caso, na primeira captura podemos colocar o nome do domínio, e na segunda - sua zona.
Vamos fazer isso. Primeiro, vamos escrever uma regex que encontra o domínio na string:
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
Agora, na nossa regex, vamos designar quais partes devem ir para qual captura. Isso é feito usando parênteses. Vamos isolar com eles a parte da regex que encontra o nome do domínio e a parte que encontra a zona do domínio:
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
Agora, na função preg_match, como
terceiro parâmetro, vamos especificar uma variável (qualquer nome):
<?php
preg_match($reg, $str, $res);
?>
A variável especificada conterá um array com as capturas encontradas. Ao mesmo tempo, no elemento zero do array estar a string encontrada, no primeiro elemento - a primeira captura, no segundo elemento - a segunda captura e assim por diante:
<?php
preg_match($reg, $str, $res);
var_dump($res); // exibirá ['site.ru', 'site', 'ru']
?>
Dada uma string com uma data:
<?php
$str = '2025-12-31';
?>
Coloque o ano, mês e dia em capturas separadas.
Dada uma string com um nome de arquivo:
<?php
$str = 'index.html';
?>
Coloque o nome do arquivo e sua extensão em capturas separadas.