Jump to content

Dificuldade em fazer expressão regular


Recommended Posts

Posted

Boa tarde a todos

Necessito copiar o Url de varias imagens, já fiz a expressão regular e refiz varias vezes, já andei na internet, e neste momento já estou a deitar fumo e não funciona bem.

Passo explicar.

Preciso copiar por exemplo este url:

//images.egorealestate.com/Z140x105/S5/C2689/P7114704/Tphoto/IDd08f6c00-0000-0500-0000-00000373e7ef.jpg

desta amalgama

<img class="thumbnail current" src="//images.egorealestate.com/Z140x105/S5/C2689/P7114704/Tphoto/IDd08f6c00-0000-0500-0000-00000373e7ef.jpg" title="DownloadPhoto" alt="DownloadPhoto%1/17" mediumlink="//images.egorealestate.com/Z640x480" originallink="//images.egorealestate.com/Z1024x768" previewsrc="/S5/C2689/P7114704/Tphoto/IDd08f6c00-0000-0500-0000-00000373e7ef.jpg" style="opacity: 1;">

Como as ER que fiz não  tiravam só o url encontrei esta na net, e que por azar tem um erro qualquer que agora não estou a ver!

preg_match_all('/(<img.*?src=['|"])([^'|"]*)(['|"].*?/?>)/mi', $url, $resultado);

Alguma mente brilhante pode fazer o favor de me dar uma ajudinha!

Desde já obrigado

Posted
30 minutos atrás, HappyHippyHippo disse:

\s(src)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?

 Olá HappyHippyHippo

Obrigado pela resposta, mas ainda dá este erro : Parse error: syntax error, unexpected ']' in C:\xampp\htdocs\imagens.php on line 18.

A linha 18 é expressão regular.

Fazes ideia do que seja.

Obrigado

Posted

Bom dia pessoal

HappyHippyHippo  usei a tua ER na integra

preg_match_all('\s(src)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?', $conteudo, $resultado);

Não é assim?

Obrigado

Posted

Tens mesmo de usar uma expressão regular? É que para obteres o que queres podes usar um parser de XML/HTML, que neste caso te simplifica muito a vida.

Se tiveres de usar uma expressão regular, creio que isto faz o que queres:

<img.*src="(.*)".*[/]+>
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted
54 minutos atrás, jacreis disse:

@jmp sem os limitadores não vais à lado nenhum.

O regex fornecido pelo @ funciona na perfeição ora vê: https://regex101.com/r/veSTop/1 .
O teu problema está na não utilização de delimitadores:
https://secure.php.net/manual/en/regexp.reference.delimiters.php

 Olá jacreis

 Mesmo com limitadores o erro mantem-se, realmente a solução do HappyHippyHippo devia funcionar, mas há algo que faz dar este erro!

Posted

@jmp
O erro que estás a ter, (repara que ainda não deste nenhuma informação sobre o erro), deve-se muito provavelmente apenas a erros sintaxe do php. Ao utilizares um editor de texto com syntax highlight - como recomendado por @HappyHippyHippo - podes antecipar os erros de syntax, muito a semelhança do corrector ortográfico nos editores de texto.

Não usaria o notepad para editor, a não ser em ultimo caso. Tens vários editores por onde escolher, vê aqui: http://noeticforce.com/best-php-ide-for-programmers-windows-and-macComo prova de conceito, :

<?php

$conteudo ='<img class="thumbnail current" src="//images.egorealestate.com/Z140x105/S5/C2689/P7114704/Tphoto/IDd08f6c00-0000-0500-0000-00000373e7ef.jpg" title="DownloadPhoto" alt="DownloadPhoto%1/17" mediumlink="//images.egorealestate.com/Z640x480" originallink="//images.egorealestate.com/Z1024x768" previewsrc="/S5/C2689/P7114704/Tphoto/IDd08f6c00-0000-0500-0000-00000373e7ef.jpg" style="opacity: 1;">';

$regex = "/\s(src)=[\"\']?((?:.(?![\"']?\s+(?:\S+)=|[>\"']))+.)[\"']?/" ;

preg_match_all($regex, $conteudo, $resultado);

var_dump($resultado);

---
 

Posted
21 horas atrás, jacreis disse:

@jmp sem os limitadores não vais à lado nenhum.

O regex fornecido pelo @HappyHippyHippo funciona na perfeição ora vê: https://regex101.com/r/veSTop/1 .
O teu problema está na não utilização de delimitadores:
https://secure.php.net/manual/en/regexp.reference.delimiters.php

 Olá jacreis

Tens toda a razão já resolvi o problema!

Tive de utilizar os limitadores e alterar a ER do HappyHippyHippo para esta:

preg_match_all('/\s(src)=["\']?((?:.(?!["\']?\s+(?:\S+)=|[>"\']))+.)["\']?/', $conteudo,$resultado);

Obrigado a todos

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.