Como escrever uma expressão regular para html parsing?
-
16-09-2019 - |
Pergunta
Eu estou tentando escrever uma expressão regular para o meu parser html.
Eu quero corresponder a uma tag HTML com determinado atributo (eg. <div>
com class="tab news selected"
) que contém um ou mais tags <a href>
. A regexp deve coincidir com a tag inteira (de <div>
para </div>
). Eu sempre parecem ter "memória esgotada" erros -. Meu programa provavelmente leva cada tag pode encontrar como uma harmonização
Eu estou usando bibliotecas de regex impulso.
Solução
Você também pode encontrar essas perguntas úteis:
você pode fornecer alguns exemplos de por que é difícil de analisar XML e HTML com um regex?
Você pode fornecer um exemplo de análise de HTML com o seu analisador favorita?
Outras dicas
Você provavelmente deve olhar em esta questão re. regexps e HTML. A essência é que o uso de expressões regulares para analisar HTML não é por qualquer meio uma solução ideal.
Talvez regexps não são a melhor solução, mas eu já estou usando como cinco bibliotecas diferentes e impulso faz muito bem quando se trata de localizar marcas <a href>
e palavras-chave.
Estou usando esses regexps:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
para localizar marcas <a href>
e:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
para a localização de ligações
(BTW ele pode ser feito melhor - eu chupar a regex;?))
O que eu preciso agora é localizar as etiquetas contendo <a href>
de e acho regexps vai fazer tudo certo - talvez eu preciso escrever minha própria função de análise como Piotr disse.
Do como Flex faz: jogo
Isso leva dois regexps e uma variável de estado.
SGML marca caracteres válidos são [A-Za-z _:]
Assim: / <[A-Za-z _:] +>. / Corresponde a uma tag