RegEx corrisponde ai tag aperti eccetto i tag XHTML autocontenuti

Ho bisogno di abbinare tutti questi tag di apertura:

<p>
<a href="foo">

Ma non questi:

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

Mi è venuto in mente questo e volevo essere sicuro di averlo fatto bene. Sto catturando solo la a-z.

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

Se non sbaglio c'è scritto:

  • Trova un meno-che, poi
  • Trova (e cattura) a-z una o più volte, poi
  • Trova zero o più spazi, quindi
  • Trova qualsiasi carattere zero o più volte, avido, eccetto /, quindi
  • Trova un maggiore di

Ho capito bene? E soprattutto, cosa ne pensate?

Soluzione

Non puoi analizzare [X]HTML con la regex. Perché l'HTML non può essere analizzato dalla regex. La regex non è uno strumento che può essere utilizzato per analizzare correttamente l'HTML. Come ho già risposto tante volte qui nelle domande su HTML e regex, l'uso di regex non ti permetterà di consumare l'HTML. Le espressioni regolari sono uno strumento insufficientemente sofisticato per comprendere i costrutti impiegati dall'HTML. L'HTML non è un linguaggio regolare e quindi non può essere analizzato dalle espressioni regolari. Le query Regex non sono attrezzate per scomporre l'HTML nelle sue parti significative. Anche le espressioni regolari irregolari migliorate come quelle usate da Perl non sono all'altezza del compito di analizzare l'HTML. Non mi farete mai crollare. L'HTML è un linguaggio sufficientemente complesso da non poter essere analizzato dalle espressioni regolari. Persino Jon Skeet non può analizzare l'HTML usando le espressioni regolari. Ogni volta che si tenta di analizzare l'HTML con le espressioni regolari, il bambino empio piange il sangue delle vergini, e gli hacker russi pwnano la tua webapp. Analizzare l'HTML con le regex evoca anime contaminate nel regno dei vivi. HTML e regex vanno insieme come l'amore, il matrimonio e l'infanticidio rituale. Il non può reggere è troppo tardi. La forza della regex e dell'HTML insieme nello stesso spazio concettuale distruggerà la tua mente come uno stucco acquoso. Se analizzi l'HTML con la regex ti stai arrendendo a Loro e ai loro modi blasfemi che ci condannano tutti a una fatica disumana per l'Uno il cui Nome non può essere espresso nel Piano Base Multilingue, lui viene. HTML-plus-regexp liquiderà i nervi del senziente mentre voi osservate, la vostra psiche appassirà nell'assalto dell'orrore. I parser HTML basati su Rege̿̔̉x sono il cancro che sta uccidendo StackOverflow è troppo tardi è troppo tardi non possiamo essere salvati la trangessione di un chi͡ld assicura che regex consumerà tutto il tessuto vivente (tranne HTML che non può, come precedentemente profetizzato) caro signore aiutaci come può qualcuno sopravvivere a questo flagello usare la regex per analizzare l'HTML ha condannato l'umanità ad un'eternità di terribili torture e buchi di sicurezza usare la regex come strumento per elaborare l'HTML stabilisce una breach tra questo mondo e il temibile regno delle entità c͒ͪo͛ͫrrupt (come entità SGML, ma più corrotte) un semplice scorciose del mondo dei regex parser per HTML trasporterà instantissimo un programmatore's consciousness into un world di urla incessanti, viene, la pestilente slithy regex-infection w;divorerà il vostro parser HTML, l'applicazione e l'esistenza per sempre come Visual Basic solo peggio he comes he comes non fight he com̡e̶s, ̕h̵is un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, tag HTML lea͠ki̧n͘g fr̶ǫm ̡yo͟ur eye͢s̸ ̛l̕ik͏e liquid pain, la canzone di re̸gular expression parsingi>nguish le voci di mortal uomo dalla spqui posso vederlo puoi vedere ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ è bello the final snuffing of la menzognas dell'uomo TUTTO È LOŚ͖̩͇̗̪̏̈́T ALL IS LOST the pon̷y he comes he c̶̮omes he coei>heicho permeates all MY FACE MY FACE ᵒh dio no NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ


Hai provato invece ad usare un parser XML?


Nota del moderatore

Questo post è bloccato per evitare modifiche inappropriate al suo contenuto. Il post appare esattamente come dovrebbe apparire - non ci sono problemi con il suo contenuto. Per favore non segnalatelo alla nostra attenzione.

Commentari (3)

Prova:

]*?)?(?

È simile al tuo, ma l'ultimo > non deve essere dopo una barra, e accetta anche h1.

Commentari (8)

Vuoi che il primo > non sia preceduto da un /. Guarda qui per i dettagli su come farlo. Si parla di lookbehind negativo.

Tuttavia, una implementazione naïve di questo finirà per far corrispondere `` in questo documento di esempio

Puoi fornire qualche informazione in più sul problema che stai cercando di risolvere? Stai iterando attraverso i tag programmaticamente?

Commentari (1)