Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

daviziim

[Resolvido] ER para pegar HREF(s)

Recommended Posts

galera

tava desenvolvendo um script

 

um complemento do file_get_contents pra fla verdde

pra dxar as url tudo absolute... (nao posso usar a tag base =/ dai apelei pra ER)

 

ai to aki makukando a nao consigo obter um resultado agradavel

 

preciso pegar todos.. até de script.. os hrefs possiveis

cheguei aki: $er = '/href=(\'|")(.*)(\'|")/i';

 

o problema é: minha er nao pega tag assim: href=img.jpg, ela só funciona se conter aspas duplas ou simples

queria implmentar pra pega sem as aspas tbm, mas nao consigo

 

tentei: $er = '/href=(\'|")?(.*)(\'|"|( )?)/i'; mas nao da certo =\

 

se puder ajudar vlww!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

/href=(.*)\s/

 

evando vlw pela ajuda

mas tem 1 problema..

por exemplo, se eu usar essa ER que voce me passo ela iria pegar os espacos dpois da tag tbm

 

$str = "href='ahuahuuh' a ahuahu";

$er = '/href=(.*)\s/';

 

$str = preg_replace($er,"link",$str);

echo $str;//printa-> linkahuahu

 

algum jeito de concertar?

 

vlww

Compartilhar este post


Link para o post
Compartilhar em outros sites

href's são referências externas, URI's que NÃO PODEM conter espaços.

 

sim mas tipo, nao digo que a url teria que ter espaço

o problema é que ele tira o espaco doque nao é URL

 

vlww man

Compartilhar este post


Link para o post
Compartilhar em outros sites

e o que você quer passar através de href além de URI's ?

 

veja, o ÚNICO caractere que nos permite separar dois valores é o espaço

 

 

<a href=google.com title=teste>testando</a>

 

Exceto XHTML, o pedaço de código acima É VÁLIDO, porque? Pela existência do espaço, separando href de title

 

Vou pensar em uma outra ER que solucione o seu problema a contento, mas tenha em mente que vai gerar resultados falhos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, entendo exatamente oque voce quer dizer

 

mas tipo

to querendo dizer que se tiver um span assim:

 

<span><a href=google.com title=teste>testando</a> ahu auh <span>span1</span></span>

 

e se eu usar um replace com a ER que voce me passou, ela vai da replace nisso tudo: "href=google.com title=teste>testando</a> ahu auh "

para só na outra tag.. o texto ' ahu auh ' tbm vai embora

 

e tipo

nao quero pegar soh url de <a> tag

digo o mesmo pra script tbm

 

no caso iria gostaria de pegar todos href e src

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu desconfio que o problema é que o Evandro, ou melhor, a ER dele foi gulosa. Para impedir essa gulodice adicione uma ? ao coringa (.*):

 

$context = 'Texto <a href="http-~~-//www.google.com">Google</a> Texto Texto Texto 
<a href="http-~~-//www.yahoo.com">Yahoo</a> Texto Texto Texto <a href="http-~~-//www.uol.com.br">UOL</a> Texto Texto
<img src="imagem.jpg" />';

preg_match_all('/(href|src)=[\'"](.*?)[\'"]/', $context, $matches );

print '<pre>'; print_r( $matches );

Saída:

 

Array
(
    [0] => Array
        (
            [0] => href="http://www.google.com"'>http://www.google.com"
            [1] => href="http://www.yahoo.com"'>http://www.yahoo.com"
            [2] => href="http://www.uol.com.br"'>http://www.uol.com.br"
            [3] => src="imagem.jpg"
        )

    [1] => Array
        (
            [0] => href
            [1] => href
            [2] => href
            [3] => src
        )

    [2] => Array
        (
            [0] => http://www.google.com
            [1] => http://www.yahoo.com
            [2] => http://www.uol.com.br
            [3] => imagem.jpg
        )

)
Explicando...

 

Removi o \s pois, sem a gulodice, ele é desnecessário pois vai encontrar o href e pegar tudo o que estiver entre as aspas simples ou duplas após seu respectivo sinal de igualdade.

 

Assim, te poupa de passar um trim() quando percorrer a matriz $matches

 

Perceba que também retirei o grupo que você usou para determinar o tipo de aspa que envolverá o atributo.

 

Como apenas uma aspa é válida para abrir e para fechar, uma lista é melhor que um grupo. Se houver outra aspa do mesmo tipo pode quebrar a URL prematuramente, invalidando-a.

 

E, agrupei o href com um src, assim te permite pegar endereços de imagem também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imaggens

mt obrigado mesmo man

 

mas dai eu volto ao problema do meu primeiro poste (claro com a er arrumada :))

olha, seria possivel de adptar a er pra pegar href/src sem aspas?

exemplo: <a href=teste.html >link1</a>

 

tentei modificar a ER acrescentando um " " espaço à lista mas nao deu certo =/

ficando: '/(href|src)=[\'" ](.*?)[\'" ]/'

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera obrigado pela ajuda

com a ajuda de voces e quebrando a kbca aki, acho que consegui fazer o que queria:D

 

só queria pedir um ultimo favor: tem como verificar se vai haver 'bug'/(pegar coisas indesejaveis) na minha ER?

 

/(href|src)=[\'"]?(.*?)[\'"[:space:]]/

 

 

e pra quem quiser testar...

<?php
$context = 'Texto <a href="http://www.google.com">Google</a> Texto Texto Texto <a href="http://www.yahoo.com">Yahoo</a> Texto Texto Texto <a href="http://www.uol.com.br">UOL</a> Texto Texto<img src="imagem.jpg" />agora uma nova img... <img src=ahuahu.gif />';

preg_match_all('/(href|src)=[\'"]?(.*?)[\'"[:space:]]/', $context, $matches );
print '<pre>'; print_r( $matches ); print('</pre>');
?>

vlww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, que você optou por casar tendo ou não a aspa, simples ou dupla na abertura, seria o caso de considerá-la no fechamento também.

 

No mais, eu apenas trocaria a classe POSIX peloseu barra-letra, fica mais legível enão confunde com as listas:

 

preg_match_all('/(href|src)=[\'"]?(.*?)[\'"]?\s+/', $context, $matches );

E, como pôde perceber, à esse barra-letra foi adicionado um metacaractere + para pegar nenhum, um ou mais de um espaços.

 

Nunca se sabe o que se passa pela cabeça de quem gerou o HTML...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.