Localizando e substituindo dados com expressões regulares com PHP

Vamos ver alguns exemplos de como trabalhar com a localização e substituição de dados, utilizando expressões regulares com PHP.

Neste primeiro exemplo, vamos localizar a palavra "React" dentro de um texto.

$texto = "Tutoriais sobre NodeJS, React e PHP!";

$regExp = '/React/i';

preg_match($regExp, $texto, $resultado, PREG_OFFSET_CAPTURE);

print_r($resultado);

 

A função "preg_match" foi utilizada para validar uma expressão regular em relação a uma string informada. O primeiro parâmetro é a expressão regular, o segundo é uma string. O terceiro parâmetro é um array que vai ser criado para guardar os resultados, já que pode existir mais de uma ocorrência. Ao printar o array usando a função "print_r", podemos ver detalhes do resultado.

Podemos usar o "preg_match" sem criar um array de resultados. No exemplo a seguir, vamos validar um CEP.

 

$cep = "01223-010";

$regExp = "/^(d){5}-(d){3}$/";

if(preg_match($regExp, $cep)) {

    echo "O formato do CEP é válido.";

}

 

E se for necessário substituir alguma informação? Para isso, podemos usar a função "preg_replace". No exemplo a seguir, vamos pegar um CPF com pontos e traço e deixar ele apenas com números.

 

$cpf = "123.456.789-11";

$cpf = preg_replace("/[^0-9]/", "", $cpf);

echo ($cpf);

 

Que tal um exemplo mais complicado? Vamos localizar um e-mail. Existem várias formas de escrever uma expressão para localizar um e-mail, de forma simplificada, o que vamos fazer é procurar um texto que tenha o seguinte formato

(qualquer quantidade de letras ou números)@(qualquer quantidade de letras ou números).(qualquer quantidade de letras ou números)

 

$texto = "O meu e-mail é: teste@teste.com.br. Entre em contato comigo!";

$regExp = "/[._a-zA-Z0-9-]+@[._a-zA-Z0-9-]+/i";

preg_match($regExp, $texto, $resultado, PREG_OFFSET_CAPTURE);

if (count($resultado)==0){

echo 'Não foi localizado e-mail';

} else {

echo "E-mail " . $resultado[0][0] . " localizado na posição " . $resultado[0][1];

}

 

Se você retirar o ".br" do e-mail, a pesquisa vai continuar funcionando.

Dentro do array "resultado", cada posição possui dentro um segundo array, mostrando o padrão que foi localizado, e a posição inicial dentro da string.

No próximo exemplo, vamos localizar uma data no formato dd/mm/aaaa.

 

$texto = "Data de entrega: 01/06/2020";

$regExp = "/d{2}/d{2}/d{4}/";

preg_match($regExp, $texto, $resultado, PREG_OFFSET_CAPTURE);

if (count($resultado)==0){

echo 'Não foi localizada data';

} else {

echo "Data " . $resultado[0][0] . " localizado na posição " . $resultado[0][1];

}

 

Da mesma forma que o exemplo anterior, estamos retornando apenas a primeira ocorrência encontrada.

 

Supondo que a data esteja errada, para fazer a troca de "01/06/2020" para "06/06/2020", utilizaremos o função "preg_replace". O código ficaria da seguinte forma:

 

$texto = "Data de entrega: 01/06/2020";

$regExp = "/d{2}/d{2}/d{4}/";

$texto = preg_replace($regExp, '06/06/2020', $texto);

echo $texto;

 

Outra forma de fazer seria utlizando a função "preg_filter":

 

$texto = "Data de entrega: 01/06/2020";

$regExp = "/d{2}/d{2}/d{4}/";

$texto = preg_filter($regExp, '06/06/2020', $texto);

echo $texto;

 

Também podemos pesquisar arrays usando expressões regulares, para isso vamos usar a função "preg_grep", vamos pesquisar dentro de um array de produtos e vamos criar um novo array com os produtos que tenham "la" em algum lugar do nome.

 

$nomes = array('Bola', 'Tesoura', 'Mochila', 'Camiseta', 'Bermuda', 'Panela', 'Frigideira');

$regExp = "#la#";

$resultado = preg_grep($regExp, $nomes);

print_r($resultado);

 

Veja outros conteúdos que podem ser de seu interesse