Jump to content


Photo

[Resolvido] Dúvida Expressão Regular


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

#1 fekz

fekz

    12 Horas

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

Posted 09/03/2010, 12:50

Usei essa função para marcar um link dentro de uma string em que tenha um hhttp://

function hyperlink($text){
$text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"javascript:fotos()\">\\0</a>", $text);
$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "<a href=\"javascript:fotos()\">\\2</a>", $text);
return $text;
}

Eu consegui, e o link agora está marcado com o <a> antes e depois.

Mas eu preciso agora que seja me retornado só a parte que tem o link pq eu preciso checar isso no banco, se tem algo parecido no banco...

E eu li na documentação que preciso usar \\0 \\1... mas não to conseguindo recuperar o pedaço da string com o texto... o \\0 retorna todo texto... o \\1 \\2 não consigo fzr com que venha apenas a string..

Algm me ajuda

#2 Renan L. Queiroz

Renan L. Queiroz

    Mestre

  • Usuários
  • 690 posts
  • Sexo:Masculino
  • Localidade:Brasilia - DF

Posted 09/03/2010, 13:39

O que voce está querendo e retornar o valor do src da tag a correto?

Edição feita por: Renan L. Queiroz, 09/03/2010, 13:41.

Especialidade: Desenvolvimento e Banco de Dados.


Este post lhe ajudou? Agradeça: Posted Image


#3 fekz

fekz

    12 Horas

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

Posted 09/03/2010, 16:27

Se eu tiver a string

"uhauhauha auhuhauha http://www.oi.com.br iauhauha"

Preciso retornar o http://www.oi.com.br, sem link sem nd só a parte da url mesmo!!

Entendeu?

Alguééém? Socorro!!

#4 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 09/03/2010, 16:38

Fiz um exemplo utilizando uma expressão regular que achei no Google, dê uma olhada se é isso que você precisa:

<?php

$str = "uhauhauha auhuhauha http://www.oi.com.br iauhauha";

preg_match("((https?|ftp|gopher|telnet|file|notes|ms-help)<img src='http://forum.wmonline.com.br/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />(//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", $str, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

?>

Aqui retorna:

Array
(
    [0] => http://www.oi.com.br
    [1] => http
    [2] => //
    [3] => //
)

[]'sAté mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#5 fekz

fekz

    12 Horas

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

Posted 09/03/2010, 16:51

Aqui retornou array em branco


function getURL($text){
preg_match("((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", $str, $matches);
echo "<pre>";
print_r($matches);
echo "</pre>";
}

print getURL("bla bla bla http://www.fernando.com.br Oie tudo bom");

Esquece, eu nao tinha trocado o argumento...

perai deixa eu ver agora

#6 DarkSign

DarkSign

    Doutor

  • Usuários
  • 868 posts
  • Sexo:Masculino
  • Localidade:Brasil
  • Interesses:Tecnologias na área WEB em geral e desenvolvimento.

Posted 09/03/2010, 16:55

Os \\0 \\1 \\2, etc, são chamados de "referências passadas" (backreferences) e são utilizados durante o processo de verificação da expressão regular. Não há como você USAR os valores em outro código.

Referência >>> http://www.regular-e...o/brackets.html (inglês)

Minha proposta é fazer um ereg primeiro, para que você consiga recuperar os valores encontrados. Basta utilizar o terceiro parâmetro. Ele gera a lista de padrões encontrados em um vetor.

OBS: Esse vetor armazena os padrões encontrados, se os mesmos estiverem entre parenteses na expressão regular fornecida.

Supondo que o vetor se chama $groups

Então $groups[1] conterá o primeiro padrão encontrado, $groups[2], o segundo e assim por diante.

Referência >>> http://www.php.net/m...nction.ereg.php

ereg retorna um inteiro, que é o tamanho do padrão encontrado, ou 0 caso nada seja encontrado.

Assim, como proposto, algo do tipo:

function hyperlink($text){
$link1 = ereg("([a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*)", $text, $encontrados1);
$link2 = ereg("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", $text, $encontrados2);

$text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"javascript:fotos()\">\\0</a>", $text);
$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "<a href=\"javascript:fotos()\">\\2</a>", $text);
return $text;
}

não testei o código, adaptações serão necessárias, mas a lógica é ter em $encontrados1 e $encontrados2 os padrões encontrados, que serão os links, permitindo assim, seu armazenamento no BD.

Edição feita por: DarkSign, 09/03/2010, 16:56.

Não sabe por onde começar? Que tal pelas Regras ?

#7 fekz

fekz

    12 Horas

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

Posted 09/03/2010, 17:26

Consegui!

function hyperlink($text,$urlFinal){
		$text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"javascript:fotos($urlFinal)\">\\0</a>", $text);
		$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "<a href=\"javascript:fotos($urlFinal)\">\\2</a>", $text);
		#$text = str_replace("><a hre","<a hre",$text);
		return $text;
	}	
	
	
	function getURL($text){
		preg_match("((https?|ftp|gopher|telnet|file|notes|ms-help)<img src='http://forum.wmonline.com.br/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />(//)|(\\\\))+[
\w\d:#@%/;$()~_?\+-=\\\.&]*)", $text, $matches);

		return $matches[0];
	}

$texto 	= $tweets->getRecordValue($i, "texto");
					
					$url	= getUrl($texto);					
					
					$link = new gossip_twitpic();
					$link->getData(array(
					"EXTRAWHERE"	=>	"url = '$url'"
					));
					
					$urlFinal = $link->getRecordValue($k, "idTwitpic");													
					$texto	= hyperlink($texto,$urlFinal);


Vlw pela explicação do cara ai emcima, eu entendi.. o xxxxxx é fzr as expressões regulares, acho mto tenso... mas vlw pela ajuda ai pessoal

Edição feita por: Dudu, 10/03/2010, 16:51.


#8 DarkSign

DarkSign

    Doutor

  • Usuários
  • 868 posts
  • Sexo:Masculino
  • Localidade:Brasil
  • Interesses:Tecnologias na área WEB em geral e desenvolvimento.

Posted 09/03/2010, 22:15

Beleza cara! Bom que funcionou.

Sim, encontrar as expressões é muito chato mesmo :P

Agora, só falta tu por teu código entre [code=auto:0][/ code] para melhor visualização.

Flws!
Não sabe por onde começar? Que tal pelas Regras ?




0 user(s) are reading this topic

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

IPB Skin By Virteq