Jump to content


Photo

Problema Com Preg_match_all


  • Faça o login para participar
7 replies to this topic

#1 luizhcota

luizhcota

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 31/07/2009, 13:44

Pessoal,

Tenho que pegar o conteúdo que está dentro de um html, a tag é:

<td align="right" nowrap width="134" class="label">31/03/2009</td>

estou tentando assim, porém não consegui.

$erValor = "/<td width=\"134\" align=\"right\" class=\"text\"(.*?)?>31/03/2009(.*?)<\/td>/i";

preg_match_all ($erValor, $resultado, $ImprimiValor);

alguma sugestão?

#2 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 31/07/2009, 16:52

vc precisa da data?
fiz assim:
/<td align="right" nowrap width="134" class="label">\(.*\)<\/td>/
e no primeiro espelho me retornou:
31/03/2009

[]'s
[]'s

#3 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 01/08/2009, 23:51

MarcoviZ: No caso, seria sem o escape nos parênteses.

Mas enfim, as vezes pode ser melhor você utilizar uma extensão como a SimpleXML, que fica bem simples o acesso aos nodes num HTML.

Exemplo:
[codebox]<?php

$source = <<<HTML
<html>
<body>
<table>
<tr>
<td width="134" align="right" class="text">teste</td>
</tr>
<tr>
<td width="134" align="right" class="text">31/03/2009</td>
</tr>
</table>
</body>
</html>
HTML;

$html = simplexml_load_string($source);
var_dump($html->body->table->tr[1]->td); // Segundo <tr><td>[/codebox]
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#4 luizhcota

luizhcota

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 09/08/2009, 01:38

Pessoal,

Na verdade eu o 31//03/2008 e o titulo da coluna. veja um exemplo em http://luizhcota.k2f...om/TestePhp.php
Preciso pega os dados da coluna com o título 31/03/2008.

#5 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 09/08/2009, 12:04

Com DOM e SimpleXML é possível fazer dessa forma:

[codebox]<?php

$dom = new DOMDocument;
@$dom->loadHTMLFile('http://luizhcota.k2f...om/TestePhp.php');

$html = simplexml_import_dom($dom);

foreach ($html->body->center->table->tr[1] as $table) {
foreach ($table->div->table->tr as $x) {
var_dump((string)$x->td[3]);
}
}
[/codebox]
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#6 luizhcota

luizhcota

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 09/08/2009, 21:47

Desculpe, sou novo no php e não conheço bem essa função, no caso de inserir as informações no banco de dados como seria sem o string(10), string(9)....... somente os valores

$dom = new DOMDocument;
@$dom->loadHTMLFile('http://luizhcota.k2free.com/TestePhp.php');

$html = simplexml_import_dom($dom);

foreach ($html->body->center->table->tr[1] as $table) {
		foreach ($table->div->table->tr as $x) {
				$teste = var_dump((string)$x->td[3]);
				$res = mysql_connect("localhost","root","") or die ('Não foi possível conectar ao banco de dados!');
	mysql_select_db("Dados") or die ('Base de Dados Danificada');   
	$comando = "INSERT INTO teste VALUES ('teste')";
	$res = mysql_query($comando);
				
		}
}

Edição feita por: luizhcota, 09/08/2009, 21:50.


#7 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 10/08/2009, 20:53

mysql_connect dentro de loop? Você só precisa chamar a função uma vez. Não é mesmo? :D

No INSERT, basta usar:

[codebox]mysql_query("INSERT INTO teste VALUES ('". mysql_escape_string((string)$x->td[3]) ."')");[/codebox]
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#8 luizhcota

luizhcota

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 11/08/2009, 08:18

Com certeza o mysql_connect tem que ficar fora do loop !! foi apenas um erro de Ctrl C e Ctrl V !!

Vou testar e coloco o resultado aqui.



Eclesiastes,

Perfeito, o codigo funcionou perfeitamente. Agora só de curiosidade, no caso de ter usado o código citado no primeiro post, como seria?

$erValor = "/<td width=\"134\" align=\"right\" class=\"text\"(.*?)?>31/03/2009(.*?)<\/td>/i";

preg_match_all ($erValor, $resultado, $ImprimiValor);

Edição feita por: luizhcota, 11/08/2009, 08:18.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq