Qual melhor função php: str_replace vs preg_replace?

Muitos já devem ter ficado na dúvida de qual função usar quando se trata de substituir uma string no php, assim como outras funções que o php oferece parece oferecer uma certa duplicidade e por consequência muito mais opções o que é muito bom, no entanto, cada função foi criada dentro de um contexto para uma finalidade, então agora vou dar uma pequena explicação sobre isso usando as funções do php str_replace vs preg_replace.

Funciona da seguinte forma nome_da_função( mixed $o_que_buscar , mixed $substituir_por, mixed $onde_alterar ), ambas procuram um conteúdo e substitui por outro, podendo até ter um controle de número de vezes de alterações. Porém a função preg_replace oferece um coisa adicional e útil em algumas situações, que é o uso de Regex, muito bom para quando queremos alterar um padrão com por exemplo url de uma tag img do html (<img src=”http://site.com/image.jpg” alt=”logo do site”>).

Apesar de a função preg_replace oferecer um pouco mais de funcionalidade e poder aos programadores, a função str_replace nos traz um pouco mais de velocidade nas substituições, antes que falei que a diferença é mínima eu concordo, porém o problema surge quando você está usando o preg_replace para alterar textos como “ameixa” por “acerola” que são coisas simples que o próprio str_replace poderia fazer e sendo usado muitas vezes você tem ai sim uma grande diferença em processamento. Caso esteja duvidando dessa diferença procure por testes de benchmark entre as funções ou faça vocês mesmo, caso poste aqui não esqueça de informar as configurações do servidor em que foi feito o teste. Isso sem falar de substituições mais bizarras a nível de caracteres mesmo, com código loucos e tudo o mais, porém acredito que quem se preocupe mais com isso seja o pessoal focado em segurança.

Lembrando que não comentei sobre a função ereg_replace pois ela já não é mais aceita nas novas versões do php, mas para que não sabe ela era a versão antiga do preg_replace a questão é que o preg_replace é uma biblioteca PEAR e o ereg_replace era desenvolvido no core do php e a “comunidade php” decidiu que era melhor usa a biblioteca do PEAR.

Bom espero que o post te motive a pensar antes de programar e não somente usar o que acha mais legal, pois há vários outros fatores que podem deixar muito melhor sua lógica, claro que dentro do contexto em que estais a trabalhar.

Abraços 🙂