RegEx correspond aux balises ouvertes, sauf aux balises autonomes XHTML

Je dois faire correspondre toutes ces balises d'ouverture :

<p>
<a href="foo">

Mais pas celles-ci :

<br />
<hr class="foo" />

J'ai trouvé ça et je voulais m'assurer que j'avais raison. Je ne saisis que le a-z.

<([a-z]+) *[^/]*?>

Je crois que c'est écrit :

  • Trouver un moins que, puis
  • Trouver (et capturer) a-z une ou plusieurs fois, puis
  • Trouver zéro ou plusieurs espaces, puis
  • Trouver n'importe quel caractère zéro fois ou plus, par gourmandise, sauf /, puis
  • Trouver un plus grand que

Est-ce que j'ai bien compris ? Et surtout, qu'en pensez-vous ?

Solution

Vous ne pouvez pas analyser le [X]HTML avec une expression rationnelle. Parce que le HTML ne peut pas être analysé par une expression rationnelle. La commande Regex n'est pas un outil qui peut être utilisé pour analyser correctement le HTML. Comme j'ai déjà répondu tant de fois ici aux questions sur le HTML et la regex, l'utilisation de la regex ne vous permettra pas de consommer du HTML. Les expressions régulières sont un outil qui n'est pas suffisamment sophistiqué pour comprendre les constructions employées par HTML. Le HTML n'est pas un langage régulier et ne peut donc pas être analysé par des expressions régulières. Les requêtes Regex ne sont pas équipées pour décomposer le HTML en ses parties significatives. tant de fois mais je n'y arrive pas. Même les expressions régulières irrégulières améliorées telles qu'utilisées par Perl ne sont pas à la hauteur de l'analyse du HTML. Vous ne me ferez jamais craquer. Le HTML est un langage suffisamment complexe pour ne pas être analysé par des expressions régulières. Même Jon Skeet ne peut pas analyser le HTML en utilisant des expressions régulières. Chaque fois que vous essayez d'analyser le HTML à l'aide d'expressions régulières, l'enfant impie pleure le sang des vierges et les hackers russes détruisent votre application web. L'analyse du langage HTML avec des expressions régulières appelle les âmes souillées dans le royaume des vivants. HTML et regex vont ensemble comme l'amour, le mariage et l'infanticide rituel. Le ne peut pas tenir, il est trop tard. La force de la regex et du HTML réunis dans le même espace conceptuel détruira votre esprit comme autant de pâte à modeler aqueuse. Si vous analysez le HTML avec regex, vous leur donnez raison, eux et leurs méthodes blasphématoires qui nous condamnent tous à un labeur inhumain pour celui dont le nom ne peut être exprimé dans le plan multilingue de base, il arrive. HTML-plus-regexp va liquéfier les nerfs des êtres sensibles pendant que vous observez, votre psyché se flétrissant sous l'assaut de l'horreur. Les analyseurs HTML basés sur Rege̿̔̉x sont le cancer qui tue StackOverflow c'est trop tard, c'est trop tard, nous ne pouvons pas être sauvés la transgression d'un chi͡ld assure que Regex consommera tous les tissus vivants (à l'exception de HTML qu'il ne peut pas, comme précédemment prophétisé) dear lord help us how can anyone survive this scourge l'utilisation de regex pour analyser le HTML a condamné l'humanité à une éternité de torture et de failles de sécurité l'utilisation de regex comme outil pour traiter le HTML établit une brèche entre ce monde et le royaume redoutable des entités c͒ͪo͛ͫrrupt (comme les entités SGML, mais plus corrompues), un simple aperçu du monde des analyseurs syntaxiques pour HTML transportera considérablement la conscience d'un programmeur dans le monde entier ;La conscience d'un programmeur se transformera en un monde de cris incessants, il arrive, le pestiféré, l'infection par les regex ;b>l dévorer votre HTML parser, application et existence pour toujours comme Visual Basic seulement pire he comes he comes ne fight he com̡e̶s, ̕h̵is un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, balises HTML lea͠ki̧n͘g fr̶ǫm ̡yo͟ur eye͢s̸ ̛l̕ik͏e liquid pain, la chanson de re̸gular expression parsing will extinguish les voix de mortal homme de la spici je peux le voir pouvez-vous voir ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ il est beau til f

Commentaires (3)

Essayez :

]*?)?(?

Il est similaire au vôtre, mais le dernier > ne doit pas être après un slash, et accepte également h1.

Commentaires (8)

Vous voulez que le premier > ne soit pas précédé d'un /. Regardez [ici][1] pour savoir comment faire. C'est ce qu'on appelle le lookbehind négatif.

Cependant, une implémentation naïve de cette méthode aboutira à une correspondance avec `` dans cet exemple de document.

Pouvez-vous fournir un peu plus d'informations sur le problème que vous essayez de résoudre ? Faites-vous une itération programmée des balises ?

[1] : http://www.regular-expressions.info/lookaround.html

Commentaires (1)