Expression Regular - Trabalhando sobre Strings

Alguém pode dar um dica de como especificar via ER como pegar de uma linha de uma String o conteúdo que está dentro de aspas de um … Ou caso enxergue alguma solução com outra forma também seria legal.

Desculpa amigo acho que nao entendi vejamos

você quer pegar o conteúdo que está dentro de e jogar numa string?

abrass

Isso, imagine que você tenha uma String:

String texto = "bla bla bla <img src=""> bla bla bla";

Abraço,
AS

Tenta dar um substring na string e ver as posições

espero ter ajudado

abrass

:wink:

Substring apenas não funcionaria… Esquecí de falar de um pequeno detalhe não é padrão a qtde. de bla bla bla que vem antes de depois…

Você pode usar uma combinação de indexOf e substring…

Ou então utilizar expressão regular.

Oi, obrigado pela dica… Mas também não daria certo o uso do indexOf pois eu pegaria por um índice que não é fixo ele é variável.

Mas é justamente para isso que você usa o indexOf. Se o indíce fosse fixo, você colocava o valor literal.

Não compreendí, pode exemplificar?

Testei aqui, realmente não vejo possibilidades com o indexOf()…

up

Não é bonito, não sei se é a melhor solução(provável que não), mas funciona. Se quiser saber o que isso faz bora pro google e javadoc:

String htmlCode = "bla bla bla <img src=\"http://www.guj.com.br/\"> bla bla bla"; Pattern pattern = Pattern.compile("<img src=\"(.+)\">"); Matcher matcher = pattern.matcher(htmlCode); matcher.find(); String imgTag = matcher.group(); matcher = pattern.matcher(imgTag); System.out.println(matcher.replaceFirst("$1"));

André, sem ups ok?

Oi davidbuzatto, belê? Vou seguir sua solicitação…

marcio_gs, como vai meu brother? Cara, não funcionou acredito que problema está no que ele recebe na prática, veja:

Algo como:

001

ou invés de:

bla bla bla <img src=“http://www.guj.com.br/”> bla bla bla"

Dei uma mudada na sintaxe da Expressão Regular para:

Pattern pattern = Pattern.compile(“src=”(.+)"");

Agora não está dando mais exception está trazendo quase certinho, veja:

port_9788502095427_oeb_001_r1.jpg" alt=“001” class="imgepub

Deveria ser só o .jpg, como abaixo:

port_9788502095427_oeb_001_r1.jpg

Gente, pensei acredito que a lógica aplicada não é uma das melhores! Digo, é melhor forma seria mesmo pegar pela extensão, exemplo tudo que
termine com .jpg, gif e bmp… Entende? Se terminar numa destas extensões daí pega-se o nome do arquivo, no caso da imagem…

Muito bom, cara. Esse é o caminho mesmo, sua expressão regular ficou boa.

Ele está fazendo isso porque o operador + é “guloso”. Ou seja, ele vai parar só na última possibilidade, que é nas aspas que fecham o valor da propriedade class. O que precisa ser feito é “inibir” a expressão regular, fazendo ela considerar o primeiro match. Para isso basta adicionar uma interrogação após o +. Fica assim:

Pattern pattern = Pattern.compile("src=\"(.+?)\"")

[quote=andredecotia]Gente, pensei acredito que a lógica aplicada não é uma das melhores! Digo, é melhor forma seria mesmo pegar pela extensão, exemplo tudo que
termine com .jpg, gif e bmp… Entende? Se terminar numa destas extensões daí pega-se o nome do arquivo, no caso da imagem…[/quote]

Sua expressão regular é a mais indicada. Ela pega tudo dentro das aspas, indiferente de ter extensão ou não. Basta ajeitar para ela não ir procurando aspas para frente.

marcio_gs, você é fera!

Funcionou perfeitinho, preciso ler mais sobre RegEx. Imaginei que minha lógica estivesse furada pois pensei num cenário em que pudesse ter alguma outra tag que usasse também o src="" na mesma linha daí complicaria… Mas acredito que isso possa acontecer 1 em 1000 hehehe… Antes de executar essa lógica verifico cada linha se existe a palavra-chave “<img” caso exista daí faz a limpeza acima… Vc acho q teria algum problema manter assim?

Abração,

Podes garantir pela própria expressão regular que a tag é img.

Algo como:

 Pattern pattern = Pattern.compile("<img.*src=\"(.+?)\"")  

Essa expressão regular procura algo que começe como “<img”. O “.*” significa que pode vir uma quantidade indefinida de caracteres até achar src=, inclusive nenhum. Serve para quando src="" não é a primeira propriedade da tag.