Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Estou tentando a horas fazer com que o preg_match que eu to aprendendo a usar já que eu conheço muito pouco de ER pegar um valor numa string do tipo "<td>Campo</td><td>Valor</td>".
Nesse caso eu quero escrever o nome do campo e ele pegar qual o valor tipo:
<td>Campo N1</td><td>Teste</td><td>Campo N2</td><td>XD</td>
Quero pegar o valor do campo "Campo N2" e ele retornar "XD"
Eu achei no fórum várias coisas mas todas tratavam de pegar IDs, campos de data, e outros valores numéricos.
Só que essas expressões que testei só funcionam com números, e eu quero o texto (string qualquer)
Eu observei que qse sempre tem um \d só que quando eu tiro da erro =/
Alguém pode me dar uma mãozinha aí?
// EDIT
Código que eu to usando:
$string = "<th>Campo</th><td>398</td>";
preg_match('/<td>(\d+)/', $string, $cont);
print_r($cont);
// retorna Array ( [0] => 398 [1] => 398 )$nome = '<td>Nome: </td><td>Zé</td>';
$idade = '<td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
return preg_replace('/<td>'.$campo.': <\/td><td>(.*)<\/td>/','$1',$string);
}
echo pegaValor('nome',$nome);Evandro, primeiramente agradeço pela ajuda
mas a minha necessidade é pegar o valor sendo que ambos estão na mesma variável porque qse nunca a string vai terminar em </td>, sempre tem mais entende? Ele tem que terminar exatamente depois de </td>
$string = '<td>Nome: </td><td>Zé</td><td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
return preg_replace('/<td>'.$campo.': <\/td><td>(.*)<\/td>/','$1',$string);
}
echo pegaValor('Nome', $string);
//retorna Zé</td><td>Idade: </td><td>18Eu resolvi meio que numa lógica só que ficou parecendo gambiarra =/
Tenho que fazer mais testes
$string = '<td>Estado: </td><td>SP</td><td>Nome: </td><td>Zé</td><td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
if(!ereg($campo, $string)) return false;
return reset(explode('</td>', preg_replace('/(.*)<td>'.$campo.': <\/td><td>/','',$string)));
}
echo pegaValor('Nome', $string);
Se tiver um jeito melhor, gostaria muito de saber, mas deu pra aprender bastante ai =]
Vlw
>
Eu resolvi meio que numa lógica só que ficou parecendo gambiarra =/
Tenho que fazer mais testes
$string = '<td>Estado: </td><td>SP</td><td>Nome: </td><td>Zé</td><td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
if(!ereg($campo, $string)) return false;
return reset(explode('</td>', preg_replace('/(.*)<td>'.$campo.': <\/td><td>/','',$string)));
}
echo pegaValor('Nome', $string);
Se tiver um jeito melhor, gostaria muito de saber, mas deu pra aprender bastante ai =]
Vlw
eu acho que essa alteração dá certo. se não der, me avise que eu só posto uma nova após testes ;)
antes
return preg_replace('/<td>'.$campo.': <\/td><td>(.*)<\/td>/','$1',$string);
depois
return preg_replace('/(.*)<td>'.$campo.': <\/td><td>(.*)<\/td>(.*)/','$2',$string);Não deu certo =/
$string = '<td>Estado: </td><td>SP</td><td>Nome: </td><td>Zé</td><td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
if(!ereg($campo, $string)) return false;
return preg_replace('/(.*)<td>'.$campo.': <\/td><td>(.*)<\/td>(.*)/','$2',$string);
}
echo pegaValor('Nome', $string);
retorno:
Zé</td><td>Idade: </td><td>18
mas vlw ai Evandro, =]
<?php
$string = '<td>Estado: </td><td>SP</td><td>Nome: </td><td>Zé</td><td>Idade: </td><td>18</td>';
function pegaValor($campo,$string){
return preg_replace('/.*'.$campo.': <\/td><td>([^<]*).*/','$1',$string);
}
//debug
echo pegaValor('Estado', $string);
echo '<br />';
echo pegaValor('Nome',$string);
echo '<br />';
echo pegaValor('Idade',$string);
?>
testado e funcionando
OK . . . muito obrigado Evandro . . . !!! Depois vou testar, mas se você já fez isso ta beleza =]
Vlw mesmo!!!
(Desculpe a demora . . estava de férias rs)
Consegui fazer uma parte
O Problema é que retorna:
Array ( [0] => CampoTesteeCampo 2XXX [1] => TesteeCampo 2XXX )
¬¬''