Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

D2th3

Preg_replace para Preg_replace-callback

Recommended Posts

Pessoal,

 

Li o Manual do PHP sobre a função preg_replace_callback, mas não consegui compreender o funcionamento.

Alguém poderia me passar explicação?

 

Tenho um script abaixo que serve para limpar um texto:

function LimpaTexto($texto) {

    $texto = html_entity_decode($texto);

    $texto = strtolower(trim($texto));

    $replaces = array(
        '/[áaãâäÁAAÂÄ]/'    => 'a',
        '/[éèêë&ÉEeË]/'     => 'e',
        '/[íìîïÍ]/'         => 'i',
        '/[óòõôöOÔÓÖO]/'    => 'o',
        '/[úùûüÚUUÜ]/'      => 'u',
        '/[çÇ]/'            => 'c',
        '/[ñnN]/'           => 'n',
        '/\s[\s]+/'         => '-',
        '/( )/'             => '-',
	'/( )\/( )/'        => '-',
	'/( )[-]( )/'       => '-',
	'/\//'              => '-',
        '/[^a-z0-9\-_]/'    => '', 
        '/-+/'              => '-', 
	'/[.]/'             => '-'
        );

    $texto = preg_replace(array_keys($replaces), array_values($replaces), $texto);
	

    return $texto;
}

Preciso de ajuda para ajustar esse script e se não for pedir muito uma breve explicação sobre a função preg_replace_callback em seu funcionamento nesse script.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, o preg_replace_callback funciona da seguinte forma, observe o exemplo:

 

$text = "Olá Mundo";
// A função de Callback
function teste($matches)
{
    echo '<pre>';
    print_r($matches);
}

echo preg_replace_callback(
    "|á|", 
    "teste",
    $text);

quando ele é chamado ele passa o Match como parâmetro para a função definida como Callback passado no segundo parâmetro dele (Em vermelho). Ele retorna o restante que no exemplo cai no echo. o Match(letra á no exemplo) vai como um array para a função 'teste'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá GDrop,

 

No formato que você exemplificou ficou bem mais simples de entender o funcionamento.

 

Essa nova função (preg_replace_callback) vai converter a ocorrencia buscada com o meu Regex em um novo Array e com isso não terei como resgatar o valor ou a chave do Array anterior para informar o caracter que eu desejo torcar.

 

Exemplo

'/[áãâäÁÂÄ]/'    => 'a',

Dessa forma eu terei que desmembrar item por item.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Trabalhando com a nova função preg_replace_callback eu não gostei. Fico imaginando o motivo que o PHP teve para descontinuar a função preg_replace.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fico imaginando o motivo que o PHP teve para descontinuar a função preg_replace.

A função preg_replace não foi descontinuada

Apenas o modificador "e" é considerado obsoleto.

 

Veja:

 

Erros ¶

Um nível de erro E_DEPRECATED é emitido quando passado o modificador "\e".

Fonte: http://php.net/manual/pt_BR/function.preg-replace.php

 

Você pode continuar usando preg_replace sem medo. Só deve usar preg_replace_callback se precisar utilizar uma função para modificar a forma como preg_replace faz as substituições

 

E o seu código original não precisa ser alterado. Só precisaria se usasse o modificador "e"

 

Lista de modificadores:

http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Beraldo,

 

Isso significa que o script continuará funcionando até no PHP 7?

Poderia me passar algo do que se trata modificadores?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso significa que o script continuará funcionando até no PHP 7?

Sim.

Inclusive, você pode baixar o PHP 7 (ainda é RC, mas está bem estável) e testar. No meu Mini-curso gratuito de PHP 7 eu ensino a instalar o PHP 7 sem afetar o seu PHP estável, e mostro essa e outras dicas

 

 

Poderia me passar algo do que se trata modificadores?

São estes:

http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.