[Resolvido] Dúvida Expressão Regular
Started By fekz, 09/03/2010, 12:50
7 replies to this topic
#1
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
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
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:
#3
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!!
"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
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:
Aqui retorna:
[]'sAté mais
<?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
#5
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
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
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:
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.
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.
- Paulo André likes this
#7
Posted 09/03/2010, 17:26
Consegui!
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
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.
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)