Remoção de código html inválido com regex

0

Eu preciso de um pcre regex que selecione todas as tags html img sem uma parte src. Longa história. Com a ajuda eu cheguei a (?-s)<img(?!.*?src).*?\/> , que funcionou bem até uma linha ter uma segunda tag img WITH src part. O regex correspondeu ao primeiro <img com o último /> : (

Como posso selecionar a parte ruim <img border="0" /> de:

<p align="center"><img border="0" /> <a href="http://www.megaevent2014.com/enllac/"><img alt src="http://www.megaevent2014.com/banner/gran/"/></a></p>

Emumaexpressãoregular.

Eastagsimgpodemserinválidasporváriosmotivos.Eliminara"borda" não ajuda. Eu preciso selecionar as tags sem src, sem me importar com mais nada.

Por favor, conselhos, Atenciosamente, Peter

    
por Peter Hofman 24.06.2014 / 12:53

1 resposta

0

O seguinte padrão regex funciona para mim e deve ser bem formado para o Regex PCRE:

<img(\s*(?!src)([\w\-])+=([\"\'])[^\"\']+)*\s*\/?>
  • Para dividi-lo, comece com o literal <img e, em seguida, o \s* corresponde a qualquer caractere de espaço em branco [\r\n\t\f ] zero ou tempos ilimitados.
  • O (?!src) é o lookahead negativo, que garante que a string src seja NOT correspondida.
  • O segundo grupo de captura ([\w\-])+ procura por [a-zA-Z0-9_] entre um e ilimitado e é ganancioso (encontre o máximo de vezes possível), e o \- é um literal procurando um hífen no caso existe em algum lugar dentro do par de tags <img> .
  • O = é uma pesquisa literal por um sinal de igual.
  • O terceiro grupo de captura, ([\"\'])[^\"\']+ procura corresponder a uma aspa simples ou dupla, e depois qualquer coisa MAS uma aspa simples ou dupla (uma ou mais vezes) e, em seguida, corresponde o que quer que tenha sido encontrado como o terceiro grupo de captura (uma citação simples ou dupla).
  • Finalmente, o \s* corresponde a qualquer caractere de espaço em branco [\r\n\t\f ] zero ou tempos ilimitados, o \/? corresponde a uma barra exatamente uma vez e o > é o colchete de fechamento de todo o caso.

Regex é divertido. : -)

    
por 11.07.2014 / 19:46

Tags