Comment écrire une expression régulière pour l'analyse html?
-
16-09-2019 - |
Question
Je suis en train d'écrire une expression régulière pour mon analyseur html.
Je veux faire correspondre une balise html avec attribut donné (par exemple. De <div>
avec class="tab news selected"
) qui contient une ou plusieurs balises <a href>
. L'expression rationnelle doit correspondre à l'intégralité de la balise (de <div>
à </div>
). Il me semble toujours d'obtenir des erreurs « mémoire épuisée. » - mon programme prend probablement chaque balise peut trouver comme un correspondant
J'utilise les bibliothèques regex boost.
La solution
Vous pouvez également trouver ces questions utiles:
Pouvez-vous donner un exemple de l'analyse syntaxique HTML avec votre analyseur préféré?
Autres conseils
Vous devriez probablement cette question re. regexps et HTML. L'essentiel est que l'utilisation des expressions régulières pour analyser HTML n'est pas par tous les moyens une solution idéale.
Peut-être regexps ne sont pas la meilleure solution, mais je suis déjà en utilisant comme cinq bibliothèques différentes et ne boost bien quand il s'agit de localiser les balises <a href>
et mots-clés.
J'utilise ces expressions rationnelles:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
pour localiser les balises et <a href>
:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
pour les liens de localisation
(BTW peut-il être mieux fait - je suce à regex;))
Ce que je dois maintenant est de localiser les balises contenant feront tout droit de <a href>
et je pense que regexps - peut-être que je vais devoir écrire ma propre fonction d'analyse syntaxique comme dit piotr.
Faites comme flex fait. Jeu
Cela prend deux expressions régulières et une variable d'état.
balises SGML caractères valides sont [A-Za-z _:]
: / <[A-Za-z _:] +>. / Correspond à une balise