tocho 0 Denunciar post Postado Abril 5, 2009 Com essa linha de código: $html = file_get_contents('http://www.siteexterno.com.br'); Eu consigo obter o html de um site, esse código html tem três valores: <html> .. <body> .. . <b>R$ 18,90</b> <b>R$ 150,40</b> <b>R$ 350,99</b> </body> </html> Eu preciso pegar esses tres valores: 18,90; 150,40; 350,99. Acredito que o caminho é usar preg_match, mas ainda não obtive sucesso. Alguém pode ajudar? Grato Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Abril 5, 2009 Pode fazer assim: $achou = array(); preg_match_all("/<b>R$([0-9]+,[0-9]{2})</b>/", $html, $achou); O que acontece, você vai ter uma array $achou, cada elemento dela corresponde a um desses valores que você quer achar. Cada elemento será uma array, dentro de cada uma dessas arrays você pode acessar o texto inteiro através do elemento 0 e acessar apenas o valor através do elemento 1. Exemplo: $achou[0][0] seria <b>R$ 18,90</b> $achou[0][1] seria 18,90 Aqui um link para a função: http://br2.php.net/manual/pt_BR/function.preg-match-all.php Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 5, 2009 Pode fazer assim: $achou = array(); preg_match_all("/<b>R$([0-9]+,[0-9]{2})</b>/", $html, $achou); O que acontece, você vai ter uma array $achou, cada elemento dela corresponde a um desses valores que você quer achar. Cada elemento será uma array, dentro de cada uma dessas arrays você pode acessar o texto inteiro através do elemento 0 e acessar apenas o valor através do elemento 1. Exemplo: $achou[0][0] seria <b>R$ 18,90</b> $achou[0][1] seria 18,90 Aqui um link para a função: http://br2.php.net/manual/pt_BR/function.preg-match-all.php Apareceu o seguinte erro: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'b' in line.. A linha que o erro se refere é: preg_match_all("/<b>R$([0-9]+,[0-9]{2})</b>/", $html, $matches); A propósito!... achei show sua expressão regular.... Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Abril 5, 2009 Opa erro meu! preg_match_all("@<b>R$([0-9]+,[0-9]{2})</b>@", $html, $achou); Tenta agora! Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 5, 2009 Opa erro meu! preg_match_all("@<b>R$([0-9]+,[0-9]{2})</b>@", $html, $achou); Tenta agora! O erro não aparece mais, mas está estranho, não retorna nada, fiz um exemplo: $html2 = "minha teraa <b>R$ 15,60</b> é muito boa"; $pattern = "@<b>R$([0-9]+,[0-9]{2})</b>@"; preg_match_all($pattern, $html2, $matches); Resultado: array(2) { [0]=> array(0) { } [1]=> array(0) { } } Será que é alguma configuração do meu PHP? Nao entendi, tinha que retornar! Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Abril 5, 2009 $pattern = "@<b>R\$(?: )*([0-9]+,[0-9]{2})</b>@"; Tenta agora. Não estou testando isso por isso pode continuar dando erro mas alguma hora acerta. Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 6, 2009 $pattern = "@<b>R\$(?: )*([0-9]+,[0-9]{2})</b>@"; Tenta agora. Não estou testando isso por isso pode continuar dando erro mas alguma hora acerta. Ainda não funcionou, mas, fiz assim: $pattern = "@([0-9]+,[0-9]{2})@"; Serviu para o momento, vou pesquisar mais sobre expressões regulares para conseguir delimitar o <b> abs Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Abril 6, 2009 Consegui arrumar aqui, parece que precisava de mais uma contra-barra: <?php $html2 = "minha teraa <b>R$ 15,60</b> <b>R$16,60</b> é muito boa"; $pattern = "@<b>R\\$(?: )*([0-9]+,[0-9]{2})</b>@"; preg_match_all($pattern, $html2, $matches); print_r($matches); ?> Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 6, 2009 Consegui arrumar aqui, parece que precisava de mais uma contra-barra: <?php $html2 = "minha teraa <b>R$ 15,60</b> <b>R$16,60</b> é muito boa"; $pattern = "@<b>R\\$(?: )*([0-9]+,[0-9]{2})</b>@"; preg_match_all($pattern, $html2, $matches); print_r($matches); ?> WOW...Grande! Quem diria que essa contra-barra teria todo esse poder, hein!?..rs Muito Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites