Come scrivere un espressione regolare per l'analisi html?
-
16-09-2019 - |
Domanda
Sto cercando di scrivere un espressione regolare per il mio parser HTML.
Voglio corrispondere un tag HTML con dato attributo (ad es. <div>
con class="tab news selected"
) che contiene uno o più tag <a href>
. L'espressione regolare deve corrispondere l'intero tag (da <div>
a </div>
). Mi sembra sempre di ottenere "memoria esaurita" errori -. Il mio programma prende probabilmente ogni tag che riesce a trovare un corrispondente uno
Sto usando le librerie Boost regex.
Soluzione
È inoltre possibile trovare queste domande utili:
Potete fornire alcuni esempi del perché è difficile analizzare XML e HTML con una regex?
Potete fornire un esempio di parsing HTML con il parser preferito?
Altri suggerimenti
Probabilmente si dovrebbe guardare a questa domanda ri. espressioni regolari e HTML. Il succo è che l'utilizzo di espressioni regolari per analizzare HTML, non è affatto una soluzione ideale.
Forse espressioni regolari non sono la soluzione migliore, ma sto già utilizzando come cinque diverse librerie e spinta fa bene quando si tratta di localizzare i tag <a href>
e parole chiave.
Sto usando queste espressioni regolari:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
per localizzare i tag <a href>
e:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
per l'individuazione di collegamenti
(BTW si può fare meglio - faccio schifo a regex;?))
Quello che ho bisogno ora è localizzare i tag contenenti <a href>
di espressioni regolari e penso che farà bene - forse avrò bisogno di scrivere la mia funzione di parsing come ha detto Piotr.
Non come flex fa:. Partita
Questa operazione richiede due espressioni regolari e una variabile di stato.
tag SGML caratteri validi sono [A-Za-z _:]
: / <[A-Za-z _:] +>. / Corrisponde un tag