Ir para conteúdo

Arquivado

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

Tiagotdg

preg_match_all

Recommended Posts

Bom dia galera!!!

Preciso da ajuda de vocês.

Tenho uma string “modificar uma palavra para variavel %qualquercoisa% e %nome%”

Preciso que as palavras entre %% vire uma variável $qualquercoisa e $nome.

Com a seguinte função consegui extrair as palavras que estão entre as %%, agora não tenho nem noção de como transforma elas em variável dentro de texto.

$entrada “modificar uma palavra para variavel %qualquercoisa% e %nome%”

$saida ““modificar uma palavra para variavel $qualquercoisa e $nome”

Caso alguém saiba como fazer isso e possa me ensinar agradeço.

Obs: usei essa função para pegar as palavras entre %

preg_match_all("(%[A-Za-z]*% )", $text,$matches);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Para trocar trocar "%nome%" pela string "$nome" você pode fazer assim:

$entrada = "modificar uma palavra para variavel %qualquercoisa%  e %nome%";
$saida = preg_replace("/%([A-Za-z0-9_]+)%/", "\$\$1", $entrada);
var_dump($saida);

Para trocar "%nome%" pelo valor da váriavel $nome você pode fazer assim:

 

 

<?php
$nome = "João";
$qualquercoisa = "Teste";
$escopo = compact('nome', 'qualquercoisa');
$entrada = "modificar uma palavra para variavel %qualquercoisa%  e %nome%";
$saida = preg_replace_callback("/%([A-Za-z0-9_]+)%/", function($match) use($escopo) {
    extract($escopo);
    $grupo1 = $match[1];
    return $$grupo1;
}, $entrada);
var_dump($saida);

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado, agora apenas para entender.

 

o primeiro exemplo era exatamente o que eu queria.

a primeira ER você pego as palavras que inicia e termina com % já a segunda ER eu não entendi, funciono mas eu gostaria de entender o que foi feito.

 

se puder explicar fico grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa linha você cria uma array chave valor das variáveis informadas

$escopo = compact('nome', 'qualquercoisa');

é o equivalente a:

$escopo = array(
    'nome' => $nome,
   'qualquercoisa' => $qualquercoisa
);

A função preg_replace_callback faz a mesma coisa que a preg_replace, só que usa uma função (callback) para descobrir pelo que será substituído cada ocorrência.

 

Dentro de uma função anônima, seu contexto de variáveis e outro, por isso usamos o instrução "use" para passar a variável $escopo para o contexto da função anônima.

 

A função extract faz exatamente o contrário da função compact:

extract($escopo);

é equivalente a:

$nome = $escopo['nome'];
$qualquercoisa = $escopo['qualquercoisa'];

Na função anônima (callback do preg_replace_callback) você recebe apenas 1 parâmetro: um array, sendo o item 0 a ocorrência completa, e os seguintes itens são os grupos capturados pelo parênteses.

 

No PHP você pode referenciar uma variável pelo nome dela a partir de uma string, por exemplo:

$nome = 'Teste';
$variavel = 'nome';
echo $$variavel; // = "Teste"

O retorno da função anônima será usado como substituição, no nosso caso, o conteúdo da variável cujo nome foi indicado pelo primeiro grupo da ER;

 

Quando esta entrada é fornecida pelo usuário, é muito inseguro, pois o usuário poderia ter acesso a qualquer variável dentro daquele escopo, inclusive variáveis como $_SERVER, $_ENV

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.