Tiagotdg 0 Denunciar post Postado Outubro 12, 2014 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
Anderson Danilo 43 Denunciar post Postado Outubro 12, 2014 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
Tiagotdg 0 Denunciar post Postado Outubro 12, 2014 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
Anderson Danilo 43 Denunciar post Postado Outubro 12, 2014 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